【发布时间】:2019-08-03 10:45:31
【问题描述】:
我的任务是计算 C++ 中二维数组的每个元素在对应行 i 和列 j 中大于元素 aij 的元素数量。我的方法是提取 ith 行和 jth 列,对它们进行排序并使用计数器变量遍历排序后的数组,直到 aij 元素被发现。
但问题在于为每个此类元素提取整行 i 和整列 j。我知道可以使用 c++ 中的std::copy 函数轻松提取该行。
int **adj=new int *[n];
for(r=0;r<m;r++)
for(c=0;c<n;c++)
cin>>adj[r][c];
int buf[n];
std::copy(adj[i], adj[i] + n, buf);
但是如何提取对应的第jth列呢?
我可以很容易地用这样的循环结构来做到这一点:
int buf[m];
for(r=0;r<m;r++)
buf[r]=adj[r][j];
但这会增加时间复杂度,请记住数组的每个元素都需要此操作。有更好的方法吗?
【问题讨论】:
-
如果您的代码有效,您对特定代码相关问题没有任何疑问,并且想知道如何优化您的解决方案,CodeReview 适合您,而不是 StackOverflow。
-
@Fureeish 我不同意,这是一个很好的问题,因为它非常仅限于特定问题。这在 CodeReview 上没有位置。
-
@ruohola 我不同意这在 CodeReview 上没有位置。 OP 提出了一种算法,大概可以解决他们的问题,并想知道解决方案是否会变得更好。这似乎非常适合 CodeReview 和 StackOverflow 上的边界题外话。人们可能会提到缓存友好性、更高效的算法等等,但这通常是 CodeReview 的工作。
-
“我的任务是为二维数组的每个元素计算相应行 i 和列 j 中大于元素 aij 的元素数”所以你必须创建另一个矩阵 C,其中 Cij = (...) Aij 的计数。对吗?
-
@Bob__ 是的,你是对的。
标签: c++ arrays sorting pointers