【算法零基础100讲题解】第五讲 计数器——基于Python语言

零、写在前面

今天又是朴素的刷题人的一天;
今天的内容是关于计数器的,别问我为什么是这个,因为我也是跟着别人做的!
常规步骤,走起!

一、概念定义

计数器的定义很简单,这里的话用我自己的理解就是用一个变量去记录程序中某个需要记录的东西,比如循环次数,某个数出现的次数了等;
相信大家其实在很多题目中都遇到过需要返回一个变量次数的问题,这些问题也就是计数器常用的位置;
在Python里呢,列表与字符串都可以直接使用count去对其中某个元素进行数量统计,在下面的题目中也会遇到!

二、题目解析

1.唯一元素的和(1748)

在这里插入图片描述

class Solution:
	def sumOfUnique(self,nums:List[int])->int:
		ans=[]
		for i in nums:
			if nums.count(i)==1:
				ans.append(i)
		res=sum(ans)
		return res

这道题目的话我是采用了count方法对列表中的唯一元素重新添加在另一个列表中,最后对其求和返回即可。
1)建立用来存放唯一元素的列表ans;
2)对列表中的元素进行遍历,判断每个元素的数量是否为1;
3)将数量为1的元素加入到新建立的列表中,求和,返回。

2.字符串中的第一个唯一字符(387)

在这里插入图片描述

class Solution:
	def firstUniqChar(self,s:str)->int:
		for i in range(0,len(s)):
			if s.count(s[i])==1:
				return i
		return -1

这道题目思路与上一题类似,不过这个给我们的是字符串。
1)对每个字符串中的元素进行遍历,统计判断计数器结果是否为1;
2)若为1,返回索引;否则,返回-1。

3.检查是否所有字符出现次数相同(1941)

在这里插入图片描述

from collections import Counter

class Solution:
	def areOccurrencesEqual(self,s:str)->bool:
		freq=Counter(s)
		num=len(s)//len(freq)
		return all(i==num for i in freq.values())

先理解题目中的“好”字符串的含义,也就是需要我们统计字符串中不同字符出现的次数并且判断所有的类型出现的次数是否相同;
1)建立了哈希表用来计数每个字符出现的次数;
2)求出理论每个字符应有的次数;
3)循环遍历哈希表的值与理论值比较看是否全部相等。

4.找到所有数组中消失的数字(448)

在这里插入图片描述

class Solution:
	def findDisappearedNumbers(self,nums:List[int])->List[int]:
		n=len(nums)
		count=set(nums)
		ans=[]
		for i in range(1,n+1):
			if i not in count:
				ans.append(i)
		return ans

题目的要求是要让我们以数组的形式返回在给定的数组中未出现在给定范围内的结果;
这道题如果直接用列表的话会超时,所以中间将列表转化为了集合,这样的话可以极大减小时间复杂度;
1)返回列表的长度,将列表转化为集合,建立存放数的列表;
2)对给定的范围遍历,判断集合中是否存在这个值,如果不在,就将其添加在新建立的列表的尾端,最后遍历结束后返回即可。

5.好数对的数目(1512)

在这里插入图片描述

class Solution:
	def numIdenticalPairs(self,nums:List[int])->int:
	count=0
	for i in range(len(nums)):
		for j in range(len(nums)):
			if nums[i]==nums[j] and i<j:
				count+=1
	return count

这道题目就直接建立了一个计数器;
1)建立计数器;
2)建立双层循环遍历,题目中直接给了我们判定条件,满足时计数器加1
3)遍历结束后返回即可。

三、总结反思

计数器看起来很简单,但其实在程序里也是占据了很重要的一部分,以上的题目也只是一些简单的应用,其他的就需要大家在日常刷题中去总结,去积累!

陆陆续续刷题一段时间了,之所以把这些写出来,也是希望记录一下自己的刷题过程,如果能帮助到需要的人,那我也会很激动的!

都看到这里了,点个赞再走吧!谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MUSE_X

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

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

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

打赏作者

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

抵扣说明:

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

余额充值