目录
6283. 正整数和负整数的最大计数
代码
直接遍历统计即可
class Solution {
public int maximumCount(int[] nums) {
int a = 0, b = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] > 0) a++;
else if (nums[i] < 0) b++;
}
return Math.max(a, b);
}
}
6285. 执行 K 次操作后的最大分数
代码
用最大堆即可
ceil是上取整,操作数和返回值都是 double,需要强转,可能会出现浮点错误,所以使用整数运算规避。
ceil(a / b) = (a + b - 1) / b
class Solution {
public long maxKelements(int[] nums, int k) {
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
int n = nums.length;
for (int i = 0; i < n; i++) pq.add(nums[i]);
long ans = 0;
while (k-- > 0) {
int t = pq.peek();
pq.poll();
ans += t;
// int q = (int) Math.ceil(t / 3.0);
int q = (t + 2) / 3;
pq.add(q);
}
return ans;
}
}
6284. 使字符串总不同字符的数目相等
代码
比赛的时候看错题了,想错了,以为暴力模拟是 1e5 x 1e5,时间不够
其实只模拟 26 个字母即可,复杂度是 26 x 26
先求出来各自不同字母的数量,还有字母映射到数组中
遍历两个哈希数组,交换字母判断即可
- 如果当前不存在该字母,跳过此次循环
- 如果两个字符串有相同字母,并且 不同字母数相同,返回 true
- 交换两个字符,判断两字符串不同字母个数是否相同即可
class Solution {
public boolean isItPossible(String s1, String s2) {
int[] a = new int[26], b = new int[26];
int x = 0, y = 0;
for (int i = 0; i < s1.length(); i++) {
int t = s1.charAt(i) - 'a';
a[t]++;
if (a[t] == 1) x++;
}
for (int i = 0; i < s2.length(); i++) {
int t = s2.charAt(i) - 'a';
b[t]++;
if (b[t] == 1) y++;
}
// System.out.println(x + " " + y + " " + get_count(a) + " " + get_count(b));
for (int i = 0; i < 26; i++) {
if (a[i] == 0) continue;
for (int j = 0; j < 26; j++) {
if (b[j] == 0) continue;
if (i == j) if (x == y) return true;
a[i]--;
a[j]++;
b[i]++;
b[j]--;
if (get_count(a) == get_count(b)) return true;
a[i]++;
a[j]--;
b[i]--;
b[j]++;
}
}
return false;
}
private int get_count(int[] a) {
int ans = 0;
for (int i = 0; i < 26; i++) {
if (a[i] > 0) ans++;
}
return ans;
}
}
标签:26,return,nums,int,LeetCode,++,327,ans,单周赛
From: https://www.cnblogs.com/Changersh/p/17036227.html