【位运算】与运算的性质:a&b <= a 并且 <= b,也就是说&运算不会使得结果变大,所以最终的最大值就是原来数组的最大值,并且只有和这个数一样才能维持最大值。如果不一样的话,必然有一位不同,假设最大值是111011,另一个是111010,那么与之后就变小了。
class Solution {
// 位运算 4:33
// 两次遍历
public int longestSubarray(int[] nums) {
int max = nums[0];
for (var i = 0; i < nums.length; i++) if (nums[i] > max) max = nums[i];
int ans = 0, t = 0;
for (var i = 0; i < nums.length; i++) {
if (nums[i] == max) {
t++;
ans = Math.max(ans, t);
} else {
t = 0;
}
}
return ans;
}
}
class Solution {
// 位运算
// 4:36
// 一次遍历
public int longestSubarray(int[] nums) {
int max = nums[0];
int ans = 1, t = 1;
for (var i = 1; i < nums.length; i++) {
if (nums[i] > max) {
max = nums[i];
ans = 1;
t = 1;
} else if (nums[i] == max){
t ++;
ans = Math.max(ans, t);
} else {
t = 0;
}
}
return ans;
}
}