请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

leetcode中的一道数组简单的题是不是太笨勒差一步

package com.leetCode.text;
/**
*
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
*/
public class Test2 {
public void moveZeroes(int[] nums) {
int temp;
int x=0;
for(int i=0;i<nums.length-1;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}

       }
    }   
    
    for(int i : nums){
    	System.out.println(i);
    }
}
public static void main(String[] args) {
	int nums[]={0,1,0,3,12};
	Test2 test = new Test2();
	test.moveZeroes(nums);
}

}
现在输入是[0,0,1,3,12]
怎么把这两个0移动到最后面去

正在回答

1回答

这个问题并非一个数据结构的问题,就是一个计算机常用的处理问题的逻辑方法问题。很多这类算法问题,其实主要看接触过没接触过,和聪明笨一点儿关系都没有,只要接触过,就一定会的:)


对于此,我个人建议系统学习一遍我的《玩转算法面试》课程(https://coding.imooc.com/class/82.html),其中总结了在面试中常见的大多数这类算方法问题的“套路”:)对于这个问题,在我的《玩转算法面试》课程中,包含详细的多种方法额解答:)


==========


最简单的一个思考:就是最终结果,我们需要把所有非零元素放在这个数组的前面(0, 1, 2, ...),后面都是0元素。使用一个索引k,往后寻找非零元素;一个索引i,记录当前在这个数组前面要放置非零元素的位置(先放0,再放1,不断++),当k搜索到头,数组内不再包含非零元素以后,当前i所记录的位置之后的所有元素,都赋值0就好了:)


我的Leetcodet题解代码仓有相关代码,可以参考,看是否能够理解:)

https://github.com/liuyubobobo/Play-Leetcode/blob/master/0283-Move-Zeroes/java-0283/src/Solution2.java


加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3884565 #1
    哦那这类题不慌我要 一步步来,我还是把数据结构课程看完做一些数据结构题,才学算法面试
    回复 有任何疑惑可以回复我~ 2018-11-23 09:15:40
  • liuyubobobo 回复 提问者 慕粉3884565 #2
    加油!:)
    回复 有任何疑惑可以回复我~ 2018-11-23 10:31:06
  • 提问者 慕粉3884565 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-11-23 11:05:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信