- 找到非负数组中拥有"最大或的结果"的最短子数组,返回最短长度。
/**
* 求解数组中最短的子数组的长度的最小
*
* @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;
}