每日一题20220609

  1. 找到非负数组中拥有"最大或的结果"的最短子数组,返回最短长度。
/**
     * 求解数组中最短的子数组的长度的最小
     *
     * @param arr 非负数组
     * @return 最短子数组的长度
     */
    public static long longest(int[] arr) {
        if (arr == null || arr.length == 0) {
            return 0;
        }
        int max = 0;
        //把每个元素都进行或运算一遍
        for (int num : arr) {
            max |= num;
        }
        //所以元素的最大或运算结果还是0,证明数组内的元素只能都为0,得到最长的长度为1
        if (max == 0) {
            return 1;
        }
        int n = arr.length;
        int ans = n;
        for (int i = 0; i < n; i++) {
            int cur = 0;
            for (int j = i; j < n; j++) {
                //当前元素或上后面的元素
                cur |= arr[j];
                //和当前最大的元素进行比较是否相等
                if (cur == max) {
                    ans = Math.min(ans, j - i + 1);
                    break;
                }
            }
        }
        return ans;
    }
posted @ 2022-06-09 14:08  一棵小萌新  阅读(17)  评论(0)    收藏  举报