題目:
給你一個 非負 整數(shù)數(shù)組 nums 和一個整數(shù) k 擦囊。
如果一個數(shù)組中所有元素的按位或運算 OR 的值 至少 為 k ,那么我們稱這個數(shù)組是 特別的 愧沟。
請你返回 nums 中 最短特別非空
子數(shù)組
的長度丁恭,如果特別子數(shù)組不存在,那么返回 -1 叹放。
示例 1:
輸入:nums = [1,2,3], k = 2
輸出:1
解釋:
子數(shù)組 [3] 的按位 OR 值為 3 饰恕,所以我們返回 1 。
示例 2:
輸入:nums = [2,1,8], k = 10
輸出:3
解釋:
子數(shù)組 [2,1,8] 的按位 OR 值為 11 井仰,所以我們返回 3 埋嵌。
示例 3:
輸入:nums = [1,2], k = 0
輸出:1
解釋:
子數(shù)組 [1] 的按位 OR 值為 1 ,所以我們返回 1 俱恶。
提示:
1 <= nums.length <= 50
0 <= nums[i] <= 50
0 <= k < 64
思路:
窮舉莉恼,
將數(shù)組里的每個元素或運算,用shorts記錄最小的或運算結(jié)果速那,然后和k比較大小俐银。
java代碼:
class Solution {
public int minimumSubarrayLength(int[] nums, int k) {
int shorts = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
int temp = 0;
for (int j = i; j < nums.length; j++) {
temp = temp|nums[j];
if (temp>=k){
shorts = Math.min(shorts,j-i+1);
break;
}
}
}
if (shorts==Integer.MAX_VALUE){
return -1;
}
return shorts;
}
}