2404. 出现最频繁的偶数元素
class Solution {
public int mostFrequentEven(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
for (int num : nums) {
if ((num & 1) != 0) {
continue;
}
int times = map.getOrDefault(num,0);
map.put(num,times+1);
}
int ans = -1;
int count = 0;
for (int num : map.keySet()) {
if (map.get(num) > count) {
ans = num;
count = map.get(num);
} else if (map.get(num) == count && num < ans) {
ans = num;
}
}
return ans;
}
}
2405. 子字符串的最优划分
class Solution {
public int partitionString(String s) {
Set<Character> set = new HashSet<>();
int ans = 0;
for (char c : s.toCharArray()) {
if (!set.contains(c)) {
set.add(c);
continue;
}
ans++;
set.clear();
set.add(c);
}
return ++ans;
}
}
2406. 将区间分为最少组数
分析
对区间排序,按照左端点小的优先,相同左端点的长度更短的优先。
小顶堆存储区间的右端点。(各个分组最靠右区间的右端点,通过这个堆可以得出最多有多少个区间可以相交)
若当前区间的左端点小于等于堆顶,说明当前区间一定与堆里面的各个区间相交,所以往堆里面加入当前区间的右端点。
若当前区间的左端点大于堆顶元素,说明当前区间至少与一个区间(堆顶)相处在同一个分组,弹出堆顶元素,加入当前区间右端点,用于更新堆顶。更新堆顶就是更新分组最靠右区间的右端点,这样避免漏掉会相交的区间。
class Solution {
public int minGroups(int[][] intervals) {
PriorityQueue<Integer> heap = new PriorityQueue<>();
Arrays.sort(intervals,(a,b)->{
if (a[0] != b[0]) {
return a[0]- b[0];
} else {
return a[1] - b[1];
}
});
for (int[] arr : intervals) {
if (heap.isEmpty()) {
heap.add(arr[1]);
} else {
if (arr[0] <= heap.peek()) {
heap.add(arr[1]);
} else {
heap.add(arr[1]);
heap.poll();
}
}
}
return heap.size();
}
}