这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战
周末,重拳出击两道题,维持一下题感
"气球"的最大数量
该题出自力扣的1189 —— "气球"的最大数量
审题
给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"(气球)。
字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。
- 题目很简单,就是给出一个字符串,找出可以拼凑出"ballon"单词的字符数量,而且不能够重复使用。
- 方法很多,可以用额外的空间去统计数量,例如HashMap等,统计数量后根据最少值得出数量
- 或者利用数组存放,并且统计最少出现的值即可
编码
class Solution {
public int maxNumberOfBalloons(String text) {
int[] cnt = new int[5];
for (int i = 0; i < text.length(); ++i) {
char ch = text.charAt(i);
if (ch == 'b') {
cnt[0]++;
} else if (ch == 'a') {
cnt[1]++;
} else if (ch == 'l') {
cnt[2]++;
} else if (ch == 'o') {
cnt[3]++;
} else if (ch == 'n') {
cnt[4]++;
}
}
cnt[2] /= 2;
cnt[3] /= 2;
return Arrays.stream(cnt).min().getAsInt();
}
}
数组中重复的数字
该题出自力扣的剑指offer03 —— 数组的重复的数组
审题
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数 字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
- 题目就是找到重复的数字,而且没有限制,随便一个都可以。
- 一开始考虑到摩尔投票的方法,但是后来否决了,感觉把问题严重化了
- 还是循环就可以了,不过在此之前先排序,不过这样时间复杂就变成了nLogn了
- 其实也可以用额外的空间,用set,直接确定是否重复
编码
class Solution {
public int findRepeatNumber(int[] nums) {
Arrays.sort(nums);
int p = 0;
while(p<nums.length){
if(nums[p] == nums[p+1])return nums[p];
p++;
}
return p;
}
}