LeetCode:第57场双周赛记录
1941.检查是否所有字符出现次数相同
题目描述
给你一个字符串
s
,如果s
是一个好字符串,请你返回true
,否则请返回false
。
如果s
中出现过的所有字符的出现次数相同,那么我们称字符串s
是好字符串。
提示:
1 <= s.length <= 1000
s
只包含小写英文字母。
解法
用一个Tab
数组记录每个字符出现的次数,随后遍历数组,判断是否出现次数相同即可。
力扣第一题一般都是送分题。。。
class Solution {
public boolean areOccurrencesEqual(String s) {
int[] Tab = new int[26];
for(int i=0;i<s.length();i++) {
Tab[s.charAt(i)-'a']++;
}
int cont = 0;
for(int i=0;i<26;i++) {
if(cont!=0) {
if(Tab[i]!=0&&cont!=Tab[i])
return false;
}else {
if(Tab[i]!=0)
cont=Tab[i];
}
}
return true;
}
}
1942. 最小未被占据椅子的编号
题目描述
有
n
个朋友在举办一个派对,这些朋友从0
到n - 1
编号。派对里有无数
张椅子,编号为0
到infinity
。当一个朋友到达派对时,他会占据编号最小
且未被占据的椅子。
- 比方说,当一个朋友到达时,如果椅子 0 ,1 和 5 被占据了,那么他会占据 2 号椅子。
当一个朋友离开派对时,他的椅子会立刻变成未占据状态。如果同一时刻有另一个朋友到达,可以立即占据这张椅子。
给你一个下标从 0 开始的二维整数数组
times
,其中times[i] = [arrival_i, leaving_i]
表示第i
个朋友到达和离开的时刻,同时给你一个整数targetFriend
。所有到达时间互不相同
。
请你返回编号为targetFriend
的朋友占据的 椅子编号 。
提示
n == times.length
2 <= n <= 10^4
times[i].length == 2
1 <= arrival_i < leaving_i <=10^5
0 <= targetFriend <= n - 1
每个 a r r i v a l i arrival_i arrivali时刻互不相同
解法
竞赛时做这题卡了很久,最后我的思路和别人的也不太一样。
我是用3个哈希表:
hashA
:保存到达时间和朋友编号< a r r i v e i , i arrive_i,i arrivei,i>
hashE
:保存离去时间和朋友编号< l e a v i n g i , i leaving_i,i leavingi,i>
hashChair
:保存朋友编号和椅子编号< i i i,椅子编号>
一个优先队列:
chair
:保存剩下的椅子
然后根据时间遍历for(int i=0;i<10^5)
模拟占椅子的情况,当目标编号占椅子时返回编号。
class Solution {
public int smallestChair(int[][] times, int targetFriend) {
HashMap<