首页 > 解决方案 > 如何在给定的整数数组中找到最长的奇数子数组?(以最有效的方式)

问题描述

问题:您需要在给定的整数数组中找到最长的奇数子数组,但时间复杂度和空间辅助都应该是最好的。

我试过用一个while循环和两个索引变量(低,高while(低<=高)......)遍历数组,但我每次都没有得到好的答案......

我试过这个:(总和是数组的总和)

while (low <= high) {

            if((sum - a[low]) % 2 != 0)
                return (high - low);

            else if((sum - a[high]) % 2 != 0)
                return (high - low);

            else{
                if((sum - a[low]) % 2 == 0){
                    sum -= a[low];
                    low++;
                }

                if((sum - a[high]) % 2 == 0){
                    sum -= a[high];
                    high--;
                }
            }
        }

因为{2, 2, 2, 1, 1, 2, 2, 2, 2}我希望输出 5 但我得到 2

标签: javaarraystime-complexity

解决方案


  1. 如果整个数组是奇数,那么你就明白了。
  2. 如果是偶数,您需要找到最接近数组末尾的偶数。
    • 如果此数字接近开始,则结果是从下一个位置到结束的子阵列
    • 如果这个数字接近结束,那么结果是从开始到这个数字的子阵列(不包括数字本身)。

推荐阅读