我试图在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;
}
发布于 2018-01-01 02:06:11
您在正确的轨道上,但您的代码似乎有点复杂。
为了解决手头的问题,您需要一个嵌套循环,外循环对数组中的元素进行迭代,如果当前索引处的数字是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;
发布于 2018-01-02 02:23:34
public int[] zeroMax(int[] nums) {
int val = 0;
for (int i = 0; i < nums.length; i++){
if (nums[i] == 0){
for (int j = i; j < nums.length; j++){
if (nums[j] % 2 != 0 && nums[j] > val){
val = nums[j];
nums[i] = val;
}
}
val = 0;
}
}
return nums;
}
发布于 2019-03-15 04:43:37
public int[] zeroMax(int[] nums) {
int lod = 0; //largest odd number
for (int i = nums.length - 1; i >= 0; i--)
{
if (nums[i] % 2 != 0 && nums[i] > lod)
lod = nums[i];
if (nums[i] == 0)
nums[i] = lod;
}
return nums;
}
https://stackoverflow.com/questions/48046695
复制相似问题