小编גלע*_*רקן的帖子

通过将两个相邻的x转换为一个(x + 1)可实现的最大数量

给定一系列N整数,其中1 <= N <= 500数字介于两者之间1 and 50.在一个步骤中,任何两个相邻的相等数字x x可以用一个替换x + 1.这些步骤可达到的最大数量是多少.

例如,如果给定2 3 1 1 2 2则最大可能是4:

2 3 1 1 2 2 ---> 2 3 2 2 2 ---> 2 3 3 2 ---> 2 4 2.

很明显,我应该尝试做得比序列中可用的最大数量更好.但我无法弄清楚一个好的算法.

algorithm brute-force

5
推荐指数
1
解决办法
327
查看次数

如何检查图中是否存在给定权重的路径

给出了一个加权的无方向图,检查在顶点1和n之间是否存在权重k的路径。

看起来像一个NP问题,但要求我在2秒内检查它,K为<= 10 ^ 18。我们可以根据需要使用每条道路多次。将不胜感激。

N和M非常小(<= 50),因此我考虑将dp用于权重最大为k的路径。N,M,K是整数,边缘的权重<10 ^ 4。该图可能未连接。很遗憾,此问题来自代码部队培训,该语句不是英语,因此在附加该语句时不会有任何用处。

有一个国家有n个城市,城市的编号从1到n,所有道路均通向。每条道路连接两个城市。

沃克先生真的很喜欢散步。沿任何方向向任何方向行驶都需要w(i)分钟。沃克先生不住在城市,一到达一个城市,他便立即去另一个城市。

沃克先生从排名第一的城市开始,希望在整整K分钟内到达第n个城市。您需要检查是否可行。

输入-第一行包含两个整数n,m(1 ??? n,?m ??? 50)。接下来的m行描述道路a(i)-起点,b(i)-终点,d(i)-沿着这条路行驶所需的时间(1 ??? ai,?bi ??? n; 1 ??? di ??? 10 ^ 4)。

最后一行包含数字k-沃克先生希望其路径采用的时间(1 ??? t ??? 10 ^ 18)。

如果可以的话,打印是可能的;如果沃克先生不能在准确的k分钟内到达第n个城市,则不可能。

algorithm graph

5
推荐指数
1
解决办法
113
查看次数

我无法解决与素数幂模 1e9+7 相关的问题。我认为要解决这个问题,我们必须使用构造算法

找到 x1, x2, ..., xn:
x_1^p_1 + x_2^p_2 + ... + x_(n-1)^p_(n-1) ? x_n^p_n (mod 1e9+7)

输入:
第 1 行:正整数 n > 1
第 2 行:n 个不同的素数 p1, p2, ..., pn (p1 * p2 * ... * pn <= 1e18)

输出:
一组 n 个正整数 (x_1, x_2,..., xn) (1 <= x_i < 1e9+7)

例如,

输入 1:
2
3 5

输出 1:
1 1
(因为 1^3 ? 1^5 (mod 10^9 + 7))

输入 2:
3
2 3 7

输出 2:
8 4 …

algorithm primes

5
推荐指数
1
解决办法
335
查看次数

Haskell中sortBy的复杂性

我提出了解决另一个问题想法,并希望能够帮助确定函数的复杂性,因为我对此并不太了解.我是否正确地猜测每个块的"未分类" ?然后sortBy函数的复杂性是什么,它将一个块的最后一个与另一个块的头部进行比较?我的猜测是,该函数只会比较对,而不需要根据总列表找到一个块的顺序.另外,由于整体功能的懒惰优化,Haskell会提供不同的复杂性吗?提前致谢!O (n * log 2)

import Data.List.Split (chunksOf)
import Data.List (sortBy)

rearrange :: [Int] -> [Int]
rearrange = concat 
          . sortBy (\a b -> compare (last a) (head b)) 
          . map (sortBy (\a b -> compare b a)) 
          . chunksOf 2
Run Code Online (Sandbox Code Playgroud)

algorithm complexity-theory big-o haskell

4
推荐指数
2
解决办法
888
查看次数

在保留其结构的同时递归清空嵌套列表

我试图编写一个函数来读取包含列表的列表,并返回相同的列表结构但没有元素.

def remove_from_list(l):
    for e in l:
        if isinstance(e, list):
            remove_from_list(e)
        else:
            l.remove(e)
    return l
Run Code Online (Sandbox Code Playgroud)

所以对于这样的输入:

[1, 2, [], [3,[4]], 5]
Run Code Online (Sandbox Code Playgroud)

我应该得到这样的东西:

[[], [[]]]
Run Code Online (Sandbox Code Playgroud)

我尝试了这些输入:

[1, 2, [], [3,[4]], 5]
[1, 2, [], [2,[3]], 2]
Run Code Online (Sandbox Code Playgroud)

得到这些输出:

[2, [], [[4]]]
[[], [[3]], 2]
Run Code Online (Sandbox Code Playgroud)

这是非常令人困惑的,因为两个列表的结构是相同的; 只有元素不同.因此,我不仅会犯错误,而且会得到另一个错误.帮助我的错误的功能和解释将非常感激.

python algorithm recursion list

3
推荐指数
1
解决办法
357
查看次数

计算 A[i] 最右或最左且为 max 的段数

给你一个包含N整数的数组,你必须回答K查询。每个查询都包含一个整数X,它是数组的(从 1 开始的索引)元素的索引。
为每个查询计算以下内容:

The number of segments containing the index X as the leftmost or the 
rightmost element and the number at the index `X` is `>=` each element
of that segment.
Run Code Online (Sandbox Code Playgroud)

段形成示例:
您有 array {1, 2, 3}。可能的线段3[2,3][1,2,3][3]
2 的可能部分是[2][1,2]
我通过暴力得到了解决方案。最坏情况的时间复杂度是O(n * k)

Input: Array[] = {4,2,1,3}, Queries[] = {1,4}
Output:  
4  
3

Explanation: 
For first query 1 all possible …
Run Code Online (Sandbox Code Playgroud)

algorithm data-structures

3
推荐指数
1
解决办法
1850
查看次数

Haskell 中的自定义排序

第二次更新:

我终于按照zurgl的建议写了一些递归遍历和分组的东西。感谢所有试图提供帮助的人!

第一次更新:

我希望可以是一个排序功能,但不确定,是为了优化接下来的分组(最小化组数)。分组收集水平或垂直相邻的元组:

f xs = 
  foldr (\a@(y,x) ((b@(y',x'):xs):bs) -> if (y == y' && abs (x-x') == 1) || 
                                            (x == x' && abs (y-y') == 1)
                                            then (a:b:xs):bs 
                                            else [a]:(b:xs):bs) 
                                            [[last xs]] (init xs)
Run Code Online (Sandbox Code Playgroud)

第二个例子的输出,在“排序”之后:

*Main> f [(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]
[[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3)],[(4,1),(4,2)]]
Run Code Online (Sandbox Code Playgroud)

——更新结束——

我在构思排序功能时遇到了麻烦,我希望有人可能知道如何实现它,或者说是否可能需要比自定义排序更多的功能。我试过玩弄 sortBy,但似乎没有取得太大进展。

我如何从中获得:

[(0,1),(0,3),(1,1),(1,3),(2,0),(2,1),(2,3),(4,1),(4,2)]
Run Code Online (Sandbox Code Playgroud)

对此:

[(0,1),(1,1),(2,0),(2,1),(0,3),(1,3),(2,3),(4,1),(4,2)]
Run Code Online (Sandbox Code Playgroud)

之间的0或1的不同YY“XX”应该是主。那有意义吗?

第二个例子:

[(0,1),(0,3),(1,1),(1,3),(2,1),(2,2),(2,3),(4,1),(4,2)] 
=>
[(0,1),(1,1),(2,1),(2,2),(2,3),(1,3),(0,3),(4,1),(4,2)]
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
2135
查看次数

在`ceil(A[i] / 2)`的K次操作后最小化数组和

今天早上我没能通过这次面试。

给定一个整数数组,执行一些k操作,每个操作包括删除一个元素并将其除以 2计算 ceil然后用新元素替换该元素。

最后,最小化最终数组的结果

例子:

nums=[10,20,7]
k=4
Run Code Online (Sandbox Code Playgroud)

最终数组将是:

[5,5,4] 
Run Code Online (Sandbox Code Playgroud)

总和结果:

5+5+4=14
Run Code Online (Sandbox Code Playgroud)

设想 :

初始数组: [10,20,7]

选择7[10,20,4]

选择10[5,20,4]

选择20[5,10,4]

选择10[5,5,4]

结果:

5+5+4 = 14
Run Code Online (Sandbox Code Playgroud)

我的代码(未完成):

function minSum(num, k) {
    return num.map(value => Math.ceil(value / 2)).reduce((value, acc) => acc + value, 0)
}

console.log(minSum([10, 20, 7]))
Run Code Online (Sandbox Code Playgroud)

什么让我困惑:

• 我们如何根据操作次数挑选元素?

编辑 :

因为我收到了 2 个关闭请求,让我澄清一下:

假设我们从索引0到最后一个索引选择元素,我的代码中遗漏了什么来满足k操作?

javascript arrays algorithm

2
推荐指数
1
解决办法
586
查看次数

一次增加两个数组元素,使其全部等于最大值

给定任何自然数数组,例如: [2, 1, 2, 3] 查找数组是否可以转换为 Max 数组(打印 - “YES”),否则(打印 - “NO”)

使其成为最大数组 - 将数组的每个元素转换为等于其最大元素。在上面的例子中它将是 [3, 3, 3, 3] 但遵循这些规则 -

  1. 一次将任意两个元素增加 1(正好是 2 个元素。一次不能增加一个或两个以上元素)
  2. 多次执行此操作,直到将每个元素转换为等于最大元素(如果可能,则打印“YES”,否则“NO”)

示例输入: [2,1,2,3]

预期输出: “是”

解释:

步骤 1:将第一个和第二个元素增加 1 -

[3,2,2,3]

步骤 2:将第二个和第三个元素增加 1 -

[3,3,3,3]

任何人都可以指出解决方案 - 任何链接、类似的问题、模式或解决方案吗?谢谢

编辑:

我尝试过这种方法来解决它 -

  1. 找到最大值并将其删除
  2. 查找每个数字的重复对,然后查找剩余的单个数字
  • 偶数和奇数的数量应该相等

但不能完全得到正确的结果。

arrays algorithm data-structures

2
推荐指数
1
解决办法
858
查看次数

对所有 i、j 有效求和 max(Ai+Bj, Bi+Aj)

给定两个长度为 N 的整数数组 A 和 B。您必须找到两个求和的值:

\n

Z=\xce\xa3 \xce\xa3 max(Ai+Bj, Bi+Aj)

\n

这是我的暴力算法

\n
    \n
  1. for 循环(i 到长度)
  2. \n
  3. for 循环(j 到长度)
  4. \n
  5. sum+=Math.max(A[i]+B[j], A[j]+B[i]);
  6. \n
\n

请告诉我一个更有效的算法。

\n

algorithm data-structures array-algorithms

2
推荐指数
1
解决办法
1792
查看次数

初级可变Haskell哈希表

尝试使用简单的哈希表算法,似乎对我使用Data.HashMap.我希望更好地理解如何实现一个可变的哈希表(这将是Data.HashTable.IO?),以便提高性能.我完全迷失了...试图修改这里的例子,但是找不到我通过我获得的IO类型的方式(双关语)...提前感谢任何类型的漫游或参考一个.

例如,如何使用可变哈希表实现这个简单的练习?

import qualified Data.HashMap as HM (toList,lookup,insert,empty)

f list = g list HM.empty where
  g []     h = HM.toList h
  g (x:xs) h = case HM.lookup (x-1) h of
                 Just _  -> g xs (HM.insert x (x + 1) h)
                 Nothing -> g xs (HM.insert x x h)
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
411
查看次数

检查第二个字符串是否是另一个字符串的旋转

我正在尝试编写一个函数,该函数接受两个字符串参数,并检查第二个参数是否是第一个字符串的旋转版本。

所以结果如下:

checkRotationStrings('waterbottle', 'lewaterbott'); // true checkRotationStrings('waterbottle', 'bottlewater'); // true checkRotationStrings('waterbottle', 'erbottlewat'); // true checkRotationStrings('waterbottle', 'lewaterbottx'); // false

我编写了以下代码,但有一些边缘情况我似乎无法弄清楚:

function checkRotationStrings(string, rotatedString) {
  let result;
  let rotationCheck
  let stringArr = string.split('');
  let rotatedStringArr = rotatedString.split('')

  for (let i = 0; i < string.length - 1; i++) {
    if (rotatedString[0] === stringArr[i]) {
       result = stringArr.slice(i);
       rotationCheck = stringArr.slice(0, i).concat(result).join('');
    }
  }
  console.log(rotationCheck)
  if (rotationCheck === string){
    return true;
  } else {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

javascript algorithm

1
推荐指数
1
解决办法
2215
查看次数

为什么这个C代码不适用于JavaScript?

由于我不熟悉C,我在C中尝试第二个矩阵转置示例,简单地转换为JavaScript(下面的代码).它冻结了浏览器.

有人可以帮我理解可能导致问题的原因吗?C程序在ideone中运行良好.

正如Nirk所指出的那样,C程序中的除法是整数而不是浮点,因此循环不会在没有使用的情况下终止Math.floor.

C代码:

#include <stdio.h>

void transpose(double *m, int w, int h)
{
  int start, next, i;
  double tmp;

  for (start = 0; start <= w * h - 1; start++) {
    next = start;
    i = 0;
    do {    i++;
      next = (next % h) * w + next / h;
    } while (next > start);
    if (next < start || i == 1) continue;

    tmp = m[next = start];
    do {
      i = …
Run Code Online (Sandbox Code Playgroud)

javascript c

-1
推荐指数
1
解决办法
130
查看次数