当我在一次编码竞赛中解决一个问题时,我发现我需要这样做:给定表示子数组索引的对(i,j);
对于每个元素,计算包含它的子数组的数量。例如:
我们有一个数组<code>[7,-2,-7,0,6],对是<code<(0,2)、(1,4)、(2,3)、(0,3)</code>,那么结果数组将是<code>[2,3,4,3,1],因为第一个元素在子数组<code>(0,2),</code>(0,3)中,第二个元素在<code〈0,2》,(1,4),</code>。
当然,一种方法是手动计数,使用数组和计数,但这可能会给我TLE,因为数组大小和对数太大而无法做到这一点。我还在其他地方读到,您可以使用一个额外的数组在其中存储“东西”(为每个子数组添加/减去一些东西),然后遍历该数组以找出答案,但我不记得我在哪里读到过它。
如果您对我的算法也有任何改进,这里是原始问题:
给定大小为n的数组
我知道一种方法来查找子数组,其总和等于0:https://www.geeksforgeeks.org/print-all-subarrays-with-0-sum/。但是我上面已经说过的第二个任务,我还没有弄清楚。如果您对此有一些想法,请告诉我并非常感谢您。
您可以取每对并在开始的地方标记1,在停止的地方标记-1(在单独的数组中)。这些表示与某个索引重叠的范围数量的变化。然后迭代该列表以收集这些变化并将其累积为绝对数字(重叠范围的数量)。
下面是您作为示例给出的范围的JavaScript实现——给定列表的内容实际上与此无关,只是它的大小(示例中n=5):
js prettyprint-override">let pairs = [[0, 2], [1, 4], [2, 3], [0, 3]];
let n = 5;
// Translate pairs to +1/-1 changes in result array
let result = Array(n+1).fill(0); // Add one more dummy entry
for (let pair of pairs) {
result[pair[0]]++;
result[pair[1] + 1]--; // after(!) the range
}
result.pop(); // ignore last dummy entry
// Accumulate changes from left to right
for (let i = 1; i < n; i++) {
result[i] += result[i-1];
}
console.log(result);
我有一个数字列表,现在我想从列表中取一个数字,并检查有多少个元素可以将这个数字与余数除以0。 这是我的代码: 对于示例输入: 输出是: 但是此代码以 的时间复杂度运行。但是我的输入列表大小范围最大为 10 5,每个元素也在 1 到 105 之间。那么如何提高这个程序的时间复杂度呢?
本文向大家介绍计算Python列表中包含给定元素的子列表,包括了计算Python列表中包含给定元素的子列表的使用技巧和注意事项,需要的朋友参考一下 给定列表中的元素也可以作为另一个字符串出现在另一个变量中。在本文中,我们将查看给定列表中给定流出现了多少次。 随着范围和镜头 我们使用range和len函数来跟踪列表的长度。然后使用in条件查找字符串在列表中作为元素出现的次数。每当满足条件时,初始化为
Q) 给定阵列A1、A2…an和K计数,有多少子阵列的反转计数大于或等于K.N 所以,我在一次面试中碰到的这个问题。我想出了一个简单的解决方案,用两个for循环(O(n^2)形成所有子数组,并使用O(nlogn)的改进merge sort对数组中的逆序进行计数。这导致了O(n^3logn的复杂性),我想这是可以改善的。有什么我可以改进的方法吗?谢谢!
我正在尝试解决这个算法问题: https://dunjudge.me/analysis/problems/469/ 为了方便起见,我总结了下面的问题陈述。 给定一个长度为 ( 多数元素定义为发生的元素 时限:1.5s 例如: 如果给定的数组是[1,2,1,2,3,2], 答案是5,因为从位置1到5 (0索引)的长度为5的子数组[2,1,2,3,2]具有出现为3的数字2 首先想到的是一个明显的强力(
问题内容: 例如,存储一百万个(32位)整数列表需要多少内存? 问题答案: 有用的链接: 如何获取python对象的内存大小/用法 python对象的内存大小? 如果将数据放入字典中,我们如何计算数据大小? 但是,他们没有给出明确的答案。要走的路: 使用/不使用列表来测量Python解释器消耗的内存(使用OS工具)。 使用第三方扩展模块,该模块定义某种sizeof(PyObject)。 更新 :