我试图在 codingbat 上解决这个数组问题,但我遇到了一些问题我的代码的问题是它没有找到最大的奇数
任务是 返回给定数组的一个版本,其中数组中的每个零值都被数组中零右侧的最大奇数值替换。如果零的右边没有奇数,则将零保留为零。
[0, 5, 0, 3]) --- [5, 5, 3, 3] | [0, 4, 0, 3]) ---[3, 4, 3, 3] | [0, 1, 0]) --- [1, 1, 0]
这是我的代码
public int[] zeroMax(int[] nums) {
int max =0 , val = nums.length;
for (int i = 0; i < nums.length-1; i++){
if (nums[val-1] % 2 != 0 && nums[val-2] == 0){
max = Math.max(max, nums[val-1]);
nums[val-2] = max;
}else if (nums[val-1] % 2 ==0 && nums[val-2] == 0)
nums[val-2] = max;
val--;
}
return nums;
}
最佳答案
您的方向是正确的,但您的代码似乎有点复杂。
要解决手头的问题,您需要一个嵌套循环,外层循环遍历数组中的元素,如果当前索引处的数字是 0
,那么我们将需要开始另一个循环来搜索数组的右侧以找到最大的奇数,如果找到我们将当前索引处的元素 0
替换为奇数;否则我们保持原样。
例子:
for (int i = 0; i < nums.length-1; i++){
if(nums[i] == 0){ // if current element is 0
int largestOddNumber = Integer.MIN_VALUE; // temp largest odd number
boolean oddNumberExists = false; // is there an odd number to the right of the 0
for (int j = i + 1; j < nums.length; j++){
if(nums[j] % 2 != 0){ // is it an odd number
largestOddNumber = Math.max(largestOddNumber, nums[j]); // get largest odd number
oddNumberExists = true; // there exists an odd number
}
}
if (oddNumberExists) nums[i] = largestOddNumber; // if odd number exists then replace 0 with the largest odd number
}
}
return nums; //return modified array;
关于java - Array-2 zeromax codingbat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046695/