栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将0移到数组末尾

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将0移到数组末尾

SIZE(n)其中n = arr.size,保留顺序:

创建一个与您要从中删除0的初始数组大小相同的数组。遍历原始数组,并将每个元素添加到新数组(如果它不为0)。遇到0时,对其进行计数。现在,当您到达第一个数组的末尾时,只需将计数的0数添加到数组的末尾即可。而且,甚至更简单,因为Java将数组初始化为0,所以您可以忘记在末尾添加零。


编辑

由于您添加了无法创建新数组的其他限制,因此我们需要采取与我上面建议的方法稍有不同的方法。

大小(1)

我认为数组需要保持与0移到末尾之前相同的顺序。如果不是这种情况,那么还有另一个简单的解决方案,如Brads答案中所述:初始化“最后零”索引到数组的最后一个元素,然后向后迭代,将任何零与每次减小的最后零的索引交换您执行交换或看到零。

SIZE(1),保留顺序:

要将0移到末尾而不复制数组并使元素保持正确的顺序,您可以完全按照我的建议进行操作,而不必复制数组,但在同一数组上保留两个索引。

从数组上的两个索引开始。如果元素不为零,则不要将其复制到新数组中,而应将其保留在原处并增加两个索引。当您达到零时,仅增加一个索引。现在,如果两个索引不相同,并且您未查看0,则将当前元素替换为落后的索引位置(由于遇到0)。在这两种情况下,只要当前元素不为0,就增加另一个索引。

它看起来像这样:

int max = arr.length;for (int i = 0, int j = 0; j < max; j++) {  if (arr[j] != 0) {    if (i < j) {      swap(arr, i, j);    }    i++  }}

运行此:

{ 1, 2, 0, 0, 0, 3, 4, 0, 5, 0 }

产量:

{ 1, 2, 3, 4, 5, 0, 0, 0, 0, 0 }

我为所有好奇的人制作了一个完全可用的版本。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438548.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号