由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 网上很多blog show算法结果是个错的作者压根没验证过
相关主题
string permutation,怎么处理重复字母?急求大神指导一道面经
贴个自己的答案:Binary Tree Max Path Summax sub vector sum 问题
Yodle 面试题 Triangle 答对能有面试机会LRU question
问一个java的函数调用问题[算法]打印所有因子乘积组合
这段LIS为啥崩溃?发一个有趣的java题
java concurrence 例子问个外循环和内问题
问个fb onsite题目问一个java的基本问题
刷题弱人来问个two sum的题目返回字符串所有的 combination
H**********5
2017-11-12 16:58:40
1
比如这个
http://blog.gainlo.co/index.php/2016/11/18/uber-interview-question-move-zeroes/
一开始看效率果然很高,我就用java实现,随便跑个test居然是个错误结果。
public static void moveZeroes(int[] nums) {
int right = nums.length-1;
int operations=0;
for(int left = 0; left < nums.length; left++){
if(left>right){
nums[left]=0;
operations++;
continue;
}
if(nums[left]
w*******o
2017-11-12 18:15:02
2
这个和283的区别在于这个不要求保留原来非零数的顺序。
估计这个作者的思路是
左指针指向零,然后右指针的非零数覆盖左指针的值。
但是他忽略了一种情况就是右指针的值也可能指向0.
比如说[2,0,1,0]
这时候把后面的零赋值给前面就会造成错误。
可以在for循环的第二个if语句后加上:
while (nums[right] == 0) right--;
我的代码如下:
public void moveZeroes(int[] nums) {
int l = 0;
for (int n : nums) if (n != 0) nums[l++] = n;
while (l < nums.length) nums[l++] = 0;
}
H**********5
2017-11-12 19:29:03
3
对的,这个码就是最优解了。

【在 w*******o 的大作中提到】
: 这个和283的区别在于这个不要求保留原来非零数的顺序。
: 估计这个作者的思路是
: 左指针指向零,然后右指针的非零数覆盖左指针的值。
: 但是他忽略了一种情况就是右指针的值也可能指向0.
: 比如说[2,0,1,0]
: 这时候把后面的零赋值给前面就会造成错误。
: 可以在for循环的第二个if语句后加上:
: while (nums[right] == 0) right--;
: 我的代码如下:
: public void moveZeroes(int[] nums) {