我有一个有序的2维数组(行按升序排列)。我想将它转换为一个已排序的1维数组,以便在我的一个函数中使用它。我该怎么做?
感谢您的帮助!
答案 0 :(得分:2)
只需遍历2D数组并将值分配到一维数组中。
答案 1 :(得分:1)
最简单的方法是:
您可以使用数组已经排序的事实来尝试使用插入做一些奇特的事情,但性能提升会很小,并且代码复杂性的增加会很大。你更有可能添加bug而不是获得性能。
要进行排序插入,您需要为每个源数组添加一组索引。
答案 2 :(得分:0)
假设您的二维数组是R Rows和C列。 你可以
最后,你应该有一个单维数组,所有元素已经排序,无需进一步操作。
答案 3 :(得分:0)
假设子数组具有相同的长度,并且每行的第一个元素不小于前一行的最后一个元素:
Object[][] twoDArray;
// you are initializing it with some code here
int len = 0;
for (Object[] x : twoDArray) {
len += x.length;
}
Object[] oneDArray = new Object[len];
for (int i=0; i<len; ++i) {
oneDArray[i] = twoDArray[i/twoDArray.length][i%twoDArray.length];
}
这有O(n + m)
复杂度。
如果我的第二个假设是错误的(正如您在评论中指出的那样),那么您应该在最终阵列上调用Arrays.sort
。最终的复杂性将是O(n + m + nlogn
)。
几乎可以肯定的是,您无法优化排序。在数组转换过程中进行排序将需要每次子迭代进行另一次完整迭代,以便将元素从下一行插入其正确位置,然后将每个元素向前移动一个索引。