【LeeCode】1248. 统计「优美子数组」
原创
©著作权归作者所有:来自51CTO博客作者51玖拾柒的原创作品,请联系作者获取转载授权,否则将追究法律责任
【题目描述】
给你一个整数数组 nums
和一个整数 k
。如果某个连续子数组中恰好有 k
个奇数数字,我们就认为这个子数组是「优美子数组」。
请返回这个数组中 「优美子数组」 的数目。
https://leetcode.cn/problems/count-number-of-nice-subarrays/
【示例】
package com.company;
import java.util.*;
// 2023-03-02
class Solution {
public int numberOfSubarrays(int[] nums, int k) {
int len = nums.length;
if (len == 0) return 0;
int res = 0;
Map<Integer, Integer> map = new HashMap<>();
map.put(0, 1);
int count = 0;
for (int x : nums){
// 统计奇数个数
res += x & 1;
// 发现存在,则 count增加
if (map.containsKey(res - k)){
count += map.get(res - k);
}
map.put(res, map.getOrDefault(res, 0) + 1);
}
System.out.println(count);
return count;
}
}
public class Test {
public static void main(String[] args) {
new Solution().numberOfSubarrays(new int[]{1,1,2,1,1}, 3 ); // 输出:2
new Solution().numberOfSubarrays(new int[]{2,4,6}, 1 ); // 输出:0
new Solution().numberOfSubarrays(new int[]{2,2,2,1,2,2,1,2,2,2}, 2 ); // 输出:16
}
}
【代码】admin
package com.company;
import java.util.Arrays;
import java.util.Stack;
// 2022-02-16
class Solution {
public int longestOnes(int[] nums, int k) {
int len = nums.length;
int res = 0;
int left = 0;
int right = 0;
int sum = 0;
while (right < len){
if (nums[right] % 2 == 1) sum++;
while (sum == k){
res++;
if (nums[left] % 2 == 1) {
sum--;
}
left++;
}
// res = Math.max(res, right - left + 1);
right++;
}
System.out.println(res);
return res;
}
}
public class Test {
public static void main(String[] args) {
new Solution().longestOnes(new int[] {1,1,2,1,1}, 3); // 输出: 2
new Solution().longestOnes(new int[] {2, 4, 6}, 1); // 输出: 0
new Solution().longestOnes(new int[] {2,2,2,1,2,2,1,2,2,2}, 2); // 输出: 16
}
}
https://leetcode.cn/problems/subarray-sum-equals-k/solutions/562174/de-liao-yi-wen-jiang-qian-zhui-he-an-pai-yhyf/