Java – moves all zero values in a large array to the front of it in a time efficient manner
•
Java
You will get a large array with integral type values. How can you move all zero values to the front of the array in a time-efficient manner?
For example, 0,1,72,3,5,9,6,51,3 - > 0,3
to greet!
Solution
If you want to maintain the order between other items, loop back through all non-zero items, and then fill in zero items at the beginning:
int source = arr.Length - 1;
int dest = arr.Length - 1;
while (source >= 0) {
if (arr[source] != 0) {
arr[dest--] = arr[source];
}
source--;
}
while (dest >= 0) arr[dest--] = 0;@H_404_22@
如果项目的顺序不重要,您可以简单地将零项目与数组开头的项目交换:
int dest = 0;
for (int source = 0; source < arr.Length; source++) {
if (arr[source] == 0) {
arr[source] = arr[dest];
arr[dest++] = 0;
}
}@H_404_22@
两种算法都是O(n).
(C#中的例子,但它应该足够接近,因为它主要是关于算法的问题……)
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
