class Solution { public int lastStoneWeight(int[] stones) { int a=0; while( stones.length==1 || stones.length==0 ){ for(int i=0;i<stones.length;i++){ for(int j=1;j<stones.length;j++){ if(stones[i]>stones[j]){ a=stones[j]; stones[i]=stones[j]; stones[j]=a; } } } if(stones[stones.length-1]<=stones[stones.length]){ if(stones[stones.length-1]==stones[stones.length]){ stones.length=stones.length-2; } else if(stones[stones.length-1]<stones[stones.length]){ stones[stones.length-1]=stones[stones.length]-stones[stones.length-1]; stones.length=stones.length-1; } } } return stones[stones.length]; } } 错哪了
时间: 2024-04-08 21:34:35 浏览: 80
这段代码中有几个问题:
1. while 循环的判断条件应该是 `stones.length > 1`,因为只有至少有两个石头时才需要进行破碎的操作。所以应该将 `while( stones.length==1 || stones.length==0 )` 修改为 `while( stones.length > 1 )`。
2. 在交换石头的位置时,应该使用临时变量来保存一个石头的值,然后再进行交换。所以应该将 `a=stones[j];` 修改为 `int temp = stones[i];`,将 `stones[i]=stones[j];` 修改为 `stones[i]=stones[j];`,将 `stones[j]=a;` 修改为 `stones[j]=temp;`。
3. 在判断最后剩下的石头重量时,应该使用索引 `stones.length-1` 和 `stones.length-2` 来获取最后两个石头的重量。所以应该将 `if(stones[stones.length-1]<=stones[stones.length])` 修改为 `if(stones[stones.length-1]<=stones[stones.length-2])`,将 `stones.length=stones.length-2;` 修改为 `stones.length -= 2;`。
4. 最后返回的应该是 `stones[0]`,而不是 `stones[stones.length]`。所以应该将 `return stones[stones.length];` 修改为 `return stones[0];`。
修正后的代码如下:
```java
class Solution {
public int lastStoneWeight(int[] stones) {
while (stones.length > 1) {
for (int i = 0; i < stones.length; i++) {
for (int j = 1; j < stones.length; j++) {
if (stones[i] > stones[j]) {
int temp = stones[i];
stones[i] = stones[j];
stones[j] = temp;
}
}
}
if (stones[stones.length - 1] <= stones[stones.length - 2]) {
stones[stones.length - 2] -= stones[stones.length - 1];
stones = Arrays.copyOf(stones, stones.length - 1);
} else {
stones = Arrays.copyOf(stones, stones.length - 2);
}
}
return stones[0];
}
}
```
阅读全文