java 数组移动_java – 将0移动到数组的末尾

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

创建一个与您需要删除0的初始数组相同的数组.迭代原始数组并将每个元素添加到新数组中,前提是它不是0.当遇到0时,计算它.现在,当您到达第一个数组的末尾时,只需将计数的0数添加到数组的末尾即可.而且,甚至更简单,因为Java将数组初始化为0,您可以忘记在最后添加零.

编辑

由于您添加了无法创建新数组的附加约束,因此我们需要采用与上面建议的方法略有不同的方法.

SIZE(1)

我假设数组需要保持与0移动到结尾之前相同的顺序.如果不是这种情况,则有另一个简单的解决方案,详见Brads的答案:将“last zero”索引初始化为数组的最后一个元素,然后向后迭代,使用最后一个零的索引交换任何零,每次递减你执行交换或看到零.

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 }

yeilds:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值