给出题目一的试题链接如下:
这一题思路倒是也简单,只要找到第一个重复的数字即可。
给出python代码实现如下:
class Solution:
def repeatedCharacter(self, s: str) -> str:
cnt = defaultdict(int)
for ch in s:
cnt[ch] += 1
if cnt[ch] > 1:
return ch
提交代码评测得到:耗时37ms,占用内存13.8MB。
给出题目二的试题链接如下:
这一题我的思路非常的暴力,就是把每一行和每一列的元素全部记录下来,然后比较一下求个积即可。
给出python代码实现如下:
class Solution:
def equalPairs(self, grid: List[List[int]]) -> int:
n = len(grid)
rows = defaultdict(int)
cols = defaultdict(int)
for i in range(n):
rows[tuple(grid[i])] += 1
cols[tuple([x[i] for x in grid])] += 1
res = 0
for row in rows:
res += rows[row] * cols[row]
return res
提交代码评测得到:耗时809ms,占用内存18.9MB。
给出题目三的试题链接如下:
这一题首先就是我们先存储下每一个食物的分类和评分,然后对于每一个分类,都维护一个按照rating进行排列的数组。
然后,我们每次修改评分之后只需要同步地修改两个数组即可。
给出python代码实现如下:
class FoodRatings:
def __init__(self, foods: List[str], cuisines: List[str], ratings: List[int]):
self.foods = {}
self.cuisines = defaultdict(list)
for f, c, r in zip(foods, cuisines, ratings):
self.foods[f] = (r, c)
bisect.insort(self.cuisines[c], (-r, f))
def changeRating(self, food: str, newRating: int) -> None:
oldRating, cuisine = self.foods[food]
self.foods[food] = (newRating, cuisine)
idx = bisect.bisect_left(self.cuisines[cuisine], (-oldRating, food))
self.cuisines[cuisine].pop(idx)
bisect.insort(self.cuisines[cuisine], (-newRating, food))
return
def highestRated(self, cuisine: str) -> str:
return self.cuisines[cuisine][0][1]
提交代码评测得到:耗时1245ms,占用内存44MB。
给出题目四的试题链接如下:
这一题同样是一个巧题,问题的关键就在于说a&b
与a|b
的各个位数当中的1的个数之和恰好就是a
和b
当中的1的位数之和。
因此,这道题就变得比较简单了。
给出python代码实现如下:
class Solution:
def countExcellentPairs(self, nums: List[int], k: int) -> int:
nums = list(set(nums))
cnt = [0 for _ in range(32)]
for x in nums:
d = 0
while x != 0:
d += x % 2
x = x // 2
cnt[d] += 1
res = 0
for i in range(32):
for j in range(32):
if i + j >= k:
res += cnt[i] * cnt[j]
return res
提交代码评测得到:耗时2884ms,占用内存32.1MB。