
【模拟】第一个出现两次的字母
题目
给你一个由小写英文字母组成的字符串 s ,请你找出并返回第一个出现 两次 的字母。
注意:
- 如果 a的 第二次 出现比b的 第二次 出现在字符串中的位置更靠前,则认为字母a在字母b之前出现两次。
- s包含至少一个出现两次的字母。
示例 1:
|  |  | 
示例 2:
|  |  | 
提示:
- 2 <= s.length <= 100
- s由小写英文字母组成
- s包含至少一个重复字母
解题思路
简单模拟即可
代码
|  |  | 
【枚举+哈希】相等行列对
题目
给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目*。*
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
示例 1:
|  |  | 
示例 2:
|  |  | 
提示:
- n == grid.length == grid[i].length
- 1 <= n <= 200
- 1 <= grid[i][j] <= 10^5
解题思路
数据范围不大,枚举比较
利用哈希降时间复杂度
代码
|  |  | 
【模拟】设计食物评分系统
题目
设计一个支持下述操作的食物评分系统:
- 修改 系统中列出的某种食物的评分。
- 返回系统中某一类烹饪方式下评分最高的食物。
实现 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 <= n <= 2 * 10^4
- n == foods.length == cuisines.length == ratings.length
- 1 <= foods[i].length, cuisines[i].length <= 10
- foods[i]、- cuisines[i]由小写英文字母组成
- 1 <= ratings[i] <= 10^8
- foods中的所有字符串 互不相同
- 在对 changeRating的所有调用中,food是系统中食物的名字。
- 在对 highestRated的所有调用中,cuisine是系统中 至少一种 食物的烹饪方式。
- 最多调用 changeRating和highestRated总计2 * 10^4次
解题思路
和这周双周赛T3类似
WA了一发和上次同样的原因,val为空时,没有将该键值对erase掉
代码
|  |  | 
【思维】优质数对的数目
题目
给你一个下标从 0 开始的正整数数组 nums 和一个正整数 k 。
如果满足下述条件,则数对 (num1, num2) 是 优质数对 :
- num1和- num2都 在数组- nums中存在。
- num1 OR num2和- num1 AND num2的二进制表示中值为 1 的位数之和大于等于- k,其中- OR是按位 或 操作,而- AND是按位 与 操作。
返回 不同 优质数对的数目。
如果 a != c 或者 b != d ,则认为 (a, b) 和 (c, d) 是不同的两个数对。例如,(1, 2) 和 (2, 1) 不同。
注意: 如果 num1 在数组中至少出现 一次 ,则满足 num1 == num2 的数对 (num1, num2) 也可以是优质数对。
示例 1:
|  |  | 
示例 2:
|  |  | 
提示:
- 1 <= nums.length <= 10^5
- 1 <= nums[i] <= 10^9
- 1 <= k <= 60
解题思路
num1 or num2 和num1 and num2的二进制中值为1的位数之和 与
num1 和num2的二进制中值为1的位数之和 等价
把二进制数看成集合,根据容斥原理$|A\cup B|=|A|+|B|-|A\cap B|$得
$|A\cup B|+|A\cap B|=|A|+|B|$
代码
|  |  | 
偷学代码
|  |  | 
