刷Leetcode算法的第十一天

序言

今天是刷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 位客户的资产总量 = 62 位客户的资产总量 = 103 位客户的资产总量 = 82 位客户是最富有的,资产总量是 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), 即哈希表使用到的辅助空间的空间代价
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jianafeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值