【发布时间】:2019-01-02 11:53:34
【问题描述】:
我正在尝试解决 CodingBat 的 fix34 问题:
返回一个数组,其中包含与给定数组完全相同的数字,但重新排列,以便每个 3 后面紧跟一个 4。不要移动 3,但每个其他数字都可以移动。该数组包含相同数量的 3 和 4,每个 3 后面都有一个不是 3 的数字,并且 3 出现在数组中任何 4 之前。
- fix34([1, 3, 1, 4]) → [1, 3, 4, 1]
- fix34([1, 3, 1, 4, 4, 3, 1]) → [1, 3, 4, 1, 1, 3, 4]
- fix34([3, 2, 2, 4]) → [3, 4, 2, 2]
我的代码适用于所有情况,除了:
1. fix34([1, 3, 1, 4, 4, 3, 1])
→ [1, 3, 4, 1, 1, 3, 4] (Expected)
[1, 3, 4, 1, 4, 3, 1] (Actual Output)
2. fix34([5, 3, 5, 4, 5, 4, 5, 4, 3, 5, 3, 5])
→ [5, 3, 4, 5, 5, 5, 5, 5, 3, 4, 3, 4] (Expected)
[5, 3, 4, 5, 5, 4, 5, 4, 3, 5, 3, 5] (Actual Output)
似乎无法弄清楚为什么,提前谢谢!
public int[] fix34(int[] nums) {
int [] result = new int [nums.length];
int temp = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] == 3){
result[i] = 3;
for(int j = i + 1; j < nums.length; j++){
if(nums[j] == 4){
temp = nums[i + 1];
result[i + 1] = 4;
result[j] = temp;
nums[j] = temp;
break;
}
}
}else if(result[i] == 0){
result[i] = nums[i];
}
}
return result;
}
【问题讨论】:
-
请不要指望我们熟记所有的编码挑战/竞赛。告诉我们代码应该做什么,它实际做什么,以及你不清楚的部分。
-
是的,请edit 提出您的问题,以说明您的代码对您列为“我的代码适用于所有情况除外”的两种情况产生了什么。