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,不用优先队列(能)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人