【问题标题】:Find the highest odd number in an array using recursion in java在java中使用递归查找数组中的最大奇数
【发布时间】:2020-03-10 05:02:46
【问题描述】:
public static int highestOdd(int [] arr, int index)
{
  if(arr.length-1 == index) return arr[index];
  int high = highestOdd(arr,index+1);
  high = high > arr[index] ? high : arr[index];
  return high;
}

索引总是作为 0 传递,所以这段代码会检查所有的数字,包括偶数,但我只想输出最高的奇数。 我希望有人会帮助我 之前谢谢。

【问题讨论】:

  • 奇数是指奇数索引号还是奇数?
  • 好问题,确保你什么都没学到。

标签: java arrays recursion


【解决方案1】:

如果 arr[index] 值更高,则用 arr[index] 替换 high 值时,只需检查该值是否为奇数。否则保持高价值不变。试试下面的代码。如果数组中没有奇数,它将返回-1(假设数组的所有值都是正数,如果有可能为负值,则可以将-1替换为整数min)。如果您有任何不明白的部分,请告诉我。

public static int highestOdd(int [] arr, int index) {
   if(arr.length - 1 == index) return arr[index] % 2 > 0 ? arr[index] : -1;
   int high = highestOdd(arr,index+1);
   if(arr[index] % 2 > 0) high = high > arr[index] ? high : arr[index];
   return high;
}

【讨论】:

    【解决方案2】:

    只有在遇到奇数时才更新高位。

    public static int highestOdd(int[] arr, int index) {
            // When last Integer is odd.
            if (index == arr.length - 1 && arr[index] % 2 != 0) {
                return arr[index];
            }
            // When last Integer is even.
            else if(index == arr.length - 1)
                return Integer.MIN_VALUE;
    
            int high = highestOdd(arr, index+1);
            //Update high only when current index has odd.
            if(arr[index]%2 != 0){
                high = high > arr[index] ? high : arr[index];
            }
            return high;
        }
    

    【讨论】:

    • 小心这个arr[index] % 2 == 1。最好像这样arr[index] % 2 != 0 表达它以包含负数。
    • a%n 不应该总是返回0 to n-1 范围内的正整数。用数学说话。
    • 实际上,你可以将每个余数表示为负数。围绕这个有很多讨论。在实践中,根据编程语言的不同,您会得到一个负数或正数,因此为了确保无论其符号如何,最好将其表示为!= 0
    • 谢谢,不知道。习惯认为% 运算符类似于数学modular 函数,它总是返回一个正整数。将改变答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多