给我一个大小为n的正整数数组。对于数组中的每个索引I,我想找到最大的索引j,使得从索引I到j的数组元素之和小于或等于某个整数K。我只能用蛮力O(n^2)的方式来思考。我想知道是否有更有效的方法?
前面的答案是错误的,但我会留下它,因为它被接受,并有一个评论
有一种O(n)
time,O(1)
space滑动窗口(或“双指针”)方法。下面的代码是用Java编写的:
public static int[] rightBoundSums(int[] arr, long K) {
final int N = arr.length;
int[] ans = new int[N]; // the result
int r = 0; // the right index of the window
long sum = 0; // current sum
for (int l = 0; l < N; l++) {
// invariant: r is the first such index that
// sum(l, r - 1) > K, or N, if the end of the array was reached
while (r < N && sum <= K) {
sum += arr[r++];
}
if (arr[l] > K) {
ans[l] = -1; // if the i-th element itself is larger, than K, there is no such j
} else {
ans[l] = (r == N) ? N - 1 : r - 2;
}
sum -= arr[l];
}
return ans;
}
计算前缀和pref[0]=0,pref[i]=pref[i-1]arr[i-1]
。由于arr
的值是正的,因此可以使用前缀和arr[i]k
对每个pref[i 1]... pref[N]
的前缀和进行二进制搜索(请注意前缀和是1-index的事实)。结果的复杂度将是O(N logN)
time和O(N)
space。
问题内容: 我在一个开始从事的项目中遇到了这段代码。原始开发人员不再可用,我对此一无所知: 产生值为。这是如何运作的? 什么是运算符? 什么是运算符? 什么是运算符? 什么是运算符? 问题答案: 什么是运算符? 那是两个运算符,一个是赋值运算符,一个是一元加号,它什么都不做。 您是否输入错了并表示compund赋值运算符? 什么是运算符? 还有两个运算符,一个为后递增,一个为加法(根据最大划分规则
我在这里读这篇社论:https://www.geeksforgeeks.org/given-an-array-arr-find-the-maximum-j-i-such-that-arrj-arri/我无法理解O(n)解是如何工作的。描述它的段落似乎与准则相矛盾。我已经查看了一个示例阵列,手动确保这似乎是可行的,但对我来说,这似乎一点都不直观。 如果有人在解决编程难题方面更有经验,他会愿意解释这是
本文向大家介绍使用递归实现指定最小值和最大值之间的所有整数求和相关面试题,主要包含被问及使用递归实现指定最小值和最大值之间的所有整数求和时的应答技巧和注意事项,需要的朋友参考一下 循环 function sumNumber(min, max) { let result = 0 for (let i = min+1; i<max;i++){ result += i } return result }
我有一个s的矩阵,名为,当我按列而不是按行迭代它时,它的运行速度会慢50毫秒: 有人知道为什么会这样吗?我问过几个人,但他们都不知道为什么。我肯定这与地址在计算机内存中的表现方式有关,但我还是想找到一个更具体的答案。