序言
今天是刷LT的一天,好好干饭,好好努力,好好加油哦
Leetcode题目
小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?
输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3
例子
输入:guess = [1,2,3], answer = [1,2,3]
输出:3
输入:guess = [2,2,3], answer = [3,2,1]
输出:1
这感觉是LT最简单的题啊哈哈哈哈
只要挨个 匹配是否相等
def game(guess,answer):
acc = 0
for i in range(3):
if guess[i] == answer[i]:
acc += 1
return acc
#或者简单缩写成这样子:
def game(guess,answer):
return sum(guess[i]==answer[i] for i in range(3))
题目二
Leetcode题目:
给你一个m x n的整数网格 accounts , 其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户
例子
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10
这也很简单啊,只要sum计算出所有客户的资产,再return其中的最大值
def maximumWealth(accounts):
num_client = len(accounts) #客户的数量
asset = [] #收集每个客户的总资产
for i in range(num_client):
asset.append(sum(accounts[i]))
return max(asset) #返回最大资产
题目三
Leetcode题目:
给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目
例子
输入:nums = [1,2,3,1,1,3]
输出:4 解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
输入:nums = [1,1,1,1]
输出:6 解释:数组中的每组数字都是好数对
输入:nums = [1,2,3]
输出:0
这道题也很简单哎,今天随机刷的LT这几道题都很简单
def numIdenticalPairs(nums):
n = 0
num = len(nums)
for i in range(num):
for j in range(i+1,num):
if nums[i] == nums[j]:
n += 1
return n
只要用两个for loop 一个一个匹配就行。
复杂度分析:
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
方法二
假设nums出现的相同的数字次数为V,则出现的匹配的组数为V(V-1)/2。比如出现1的次数为3,则可匹配的相同组数为3✖️(3-1)/2 = 3组数。然后再sum up所有的组数。
而计算相同次数的函数为collections.Counter(nums)
而用collections.Counter自带的items()方法,能作为字典的输出,从而计算组数
def numIdenticalPairs(nums):
dic = collections.Counter(nums)
return sum(((v-1)*v)//2 for k,v in dic.items())
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n), 即哈希表使用到的辅助空间的空间代价