Leetcode Move Zeroes:我的错误在哪里?

时间:2016-03-01 22:57:59

标签: java debugging

这是一个简单的问题。 a link 我只是尝试了简单的insertSorting-like方法来解决它,但它失败了。

public class Solution {
    public void moveZeroes(int[] nums) {
         for(int i = 0; i < nums.length; i++)
             if(nums[i] == 0){
                    for(int j = i; j<nums.length-1; j++)
                    nums[j] = nums[j+1];
                nums[nums.length-1] = 0;
            }
    }
}

有人可以帮我调试我的方法吗?

4 个答案:

答案 0 :(得分:0)

所以我浏览了你的代码并重新编写了它。如果您将零移动到最后,这应该对您完全正常。干杯。
这段代码的作用是迭代你的数组,直到它达到零。点击零时,它会循环,将0向右移动一个地方一遍又一遍,用右边的值切换点,直到0移动到数组的末尾。

示例:5循环循环 [0,1,0,2,3]&gt; [1,0,0,2,3]&gt; [1,0,0,2,3]&gt; [1,0,2,0,3]&gt; [1,0,2,3,0]

int[] array = new int[] {0,1,0,12,3};

for (int x = 0; x < array.length; x++) {
    if (array[x] == 0) {
        for (int y = x; y < array.length; y++) {
            if (y  != array.length-1) {

                // Store our replacement as temp
                int temp = array[y+1];

                // Move 0 to the right +1
                array[y+1] = array[y];

                // Set current position to what used to be right+1
                array[y] = temp;
            }
        }
    }
}

答案 1 :(得分:0)

我将分享leetcode中针对Move Zeroes问题的javascript解决方案。它的时间复杂度为O(n)。

针对多个零进行了优化

const snowball1 = nums => {
  let i = 0;
  let j = 0;
  while (i<nums.length) {
    if(nums[i] != 0) {
      nums[j] = nums[i];
      j++;
    }
    i++;
  }
  console.log(j);
  nums.fill(0, j);
  return nums;
}

针对更少的零进行优化

const snowball2 = nums => {
  for(let i = nums.length; i--;){
    if(nums[i]===0){
      nums.splice(i,1)
      nums.push(0);
    }
  }
  return nums
}

示例

console.log(snowball1([0,0,1,0,0,3,0,12,0]));
console.log(snowball2([0,1,0,3,12]));

答案 2 :(得分:0)

我将尝试编写一种非常直观,简单的方法来解决此问题。可以使用2个索引解决此问题,其中一个是读指针(rp),另一个是写指针(wp)。

如果rp读取值为0,则将wp设置为此索引。然后,rp继续递增,直到找到一个非零值。如果这样做,它将覆盖wp处的值,并且此过程将在开头填充非零值。

然后我们只需要用零填充剩余的点,直到最后。这是python中的一个简短解决方案:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        wp=rp=0
        while(rp<len(nums)):
            if(nums[rp]!=0):
                nums[wp]=nums[rp]
                wp+=1
            rp+=1
        for i in range(wp,len(nums)):
            nums[i]=0

答案 3 :(得分:0)

请在下面找到空间O(N)和时间O(1)的最优解

    <!doctype html>
<title>Project</title>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='styles/style.css') }}">
<div class=page>
  <h1>My header</h1>
  <table>
    <th>
      {% for i in cols %}
      <td> {{i}} </td>
      {% endfor %}
    </th>
     {% for k in range(data|length) %}
    <tr>
      <td> <a href="{{ url_for('static', filename='ids/' + data.iloc[k,0]|string) }}"> {{data.iloc[k,0]}} </a> </td>
      {% for j in cols[1:]  %}
      <td> {{data.iloc[k][j]}} </td>
      {% endfor %}
    </tr>
     {% endfor %}
  </table>
</div>