leetcode中的一道数组简单的题是不是太笨勒差一步
来源:3-3 栈的另一个应用:括号匹配
慕粉3884565
2018-11-22
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题解代码仓有相关代码,可以参考,看是否能够理解:)
加油!:)
132018-11-23
相似问题