2022-8-5 笔试练习-晚上场
2351. 第一个出现两次的字母
难度简单
给你一个由小写英文字母组成的字符串 s ,请你找出并返回第一个出现 两次 的字母。
注意:
- 如果
a的 第二次 出现比b的 第二次 出现在字符串中的位置更靠前,则认为字母a在字母b之前出现两次。 s包含至少一个出现两次的字母。
1 class Solution { 2 public char repeatedCharacter(String s) { 3 Set<Character> set=new HashSet<>(); 4 for (int i=0;i<s.length();i++){ 5 if (set.contains(s.charAt(i))) return s.charAt(i); 6 else set.add(s.charAt(i)); 7 } 8 return 'a'; 9 } 10 }
思路:第一个集合包含的元素就是答案;
2352. 相等行列对
难度中等
给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
1 class Solution { 2 public int equalPairs(int[][] grid) { 3 int n=grid.length; 4 int[][] arr=new int[n][n]; 5 for (int i=0;i<n;i++){ 6 for (int j=0;j<n;j++){ 7 arr[i][j]=grid[j][i]; 8 } 9 } 10 int ans=0; 11 for (int i=0;i<n;i++){ 12 for (int j=0;j<n;j++){ 13 if (Arrays.equals(arr[i],grid[j])) ans++; 14 } 15 } 16 return ans; 17 } 18 }
思路:把列单独变成数组,然后遍历比较。
2353. 设计食物评分系统
难度中等
设计一个支持下述操作的食物评分系统:
- 修改 系统中列出的某种食物的评分。
- 返回系统中某一类烹饪方式下评分最高的食物。
实现 FoodRatings 类:
FoodRatings(String[] foods, String[] cuisines, int[] ratings)初始化系统。食物由foods、cuisines和ratings描述,长度均为n。foods[i]是第i种食物的名字。cuisines[i]是第i种食物的烹饪方式。ratings[i]是第i种食物的最初评分。
void changeRating(String food, int newRating)修改名字为food的食物的评分。String highestRated(String cuisine)返回指定烹饪方式cuisine下评分最高的食物的名字。如果存在并列,返回 字典序较小 的名字。
注意,字符串 x 的字典序比字符串 y 更小的前提是:x 在字典中出现的位置在 y 之前,也就是说,要么 x 是 y 的前缀,或者在满足 x[i] != y[i] 的第一个位置 i 处,x[i] 在字母表中出现的位置在 y[i] 之前。
1 public class FoodRatings { 2 Map<String,Pair> keyToPair; 3 Map<String, TreeSet<Pair>> keyToQueue; 4 public FoodRatings(String[] foods, String[] cuisines, int[] ratings) { 5 keyToPair=new HashMap<>(); 6 keyToQueue=new HashMap<>(); 7 int n=foods.length; 8 for (int i=0;i<n;i++){ 9 String key=foods[i]; 10 Pair pair=new Pair(foods[i],cuisines[i],ratings[i]); 11 keyToPair.put(key,pair); 12 if (!keyToQueue.containsKey(cuisines[i])){ 13 keyToQueue.put(cuisines[i],new TreeSet<Pair>(new Comparator<Pair>() { 14 @Override 15 public int compare(Pair o1, Pair o2) { 16 if (o1.rate != o2.rate) return Integer.compare(o2.rate, o1.rate); 17 else return o1.food.compareTo(o2.food); 18 } 19 })); 20 } 21 keyToQueue.get(cuisines[i]).add(pair); 22 } 23 } 24 25 public void changeRating(String food, int newRating) { 26 Pair pair=keyToPair.get(food); 27 keyToQueue.get(pair.cuisine).remove(pair); 28 pair.rate=newRating; 29 keyToPair.put(food,pair); 30 keyToQueue.get(pair.cuisine).add(pair); 31 } 32 33 public String highestRated(String cuisine) { 34 return keyToQueue.get(cuisine).first().food; 35 } 36 37 static class Pair{ 38 public String food; 39 public String cuisine; 40 public int rate; 41 Pair(String f,String c,int r){ 42 food=f; 43 cuisine=c; 44 rate=r; 45 } 46 } 47 } 48 49 /** 50 * Your FoodRatings object will be instantiated and called as such: 51 * FoodRatings obj = new FoodRatings(foods, cuisines, ratings); 52 * obj.changeRating(food,newRating); 53 * String param_2 = obj.highestRated(cuisine); 54 */
思路:两个哈希map分别记录数据以及排序的信息,优先队列性能不如Treeset,能用Treeset优先用Treeset,不用优先队列(能)。
浙公网安备 33010602011771号