【发布时间】:2019-09-10 16:38:28
【问题描述】:
这里是完整问题的链接:https://youtu.be/5dJSZLmDsxk 问题:制作一个函数,返回二维数组中负整数的个数,使得该数组中每一行的整数从索引 0 增加到 n,而每一列的整数从上到下做同样的事情. 例如
{{-5, -4, -3, -2},
{-4, -3, -2, -1},
{-3, -2, -1, 0},
{-2, -1, 0, 1}}
在视频中,CS Dojo 提出了以下解决方案:
def func(M, n, m):
count = 0
i = 0
j = m - 1
while j >= 0 and i < n:
if M[i][j] < 0:
count += j + 1
i += 1
else:
j -= 1
return count
我的问题是:为什么/以下代码效率不高? (唯一的区别是后者从左边开始,并且多次递增count
int rows = 3;
int cols = 4;
int count_neg(const int arrays[rows][cols]) {
int count = 0;
int pos = cols;
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= pos; j++) {
if (arrays[i][j] < 0)
count++;
else {
pos = j;
break;
}
}
if (pos == 0)
break; /*offers miniscule efficiency improvement?*/
}
return count;
}
请假设这些都是用同一种语言编写的。
【问题讨论】:
-
向两个解决方案添加一个
loopCount变量,并在if之前增加loopCount。每个解决方案的loopCount是什么? -
@user3386109 第二个程序是 8,第一个程序是 6,二维数组
{{-5, -4, -3, -2},{-4, -3, 2, 1}, {2, 3, 4, 5}}。感谢您的帮助。 -
不客气。 (提示:我会尝试一个 10x10 数组,其中所有数字都是负数,以查看算法之间的真正差异。即使是问题中的数组也会显示出更大的差异。)
标签: python c arrays algorithm performance