文章目录
- 零、写在前面
- 一、概念定义
- 二、题目解析
- 1.唯一元素的和(1748)
- 2.字符串中的第一个唯一字符(387)
- 3.检查是否所有字符出现次数相同(1941)
- 4.找到所有数组中消失的数字(448)
- 5.好数对的数目(1512)
- 三、总结反思
零、写在前面
今天又是朴素的刷题人的一天;
今天的内容是关于计数器的,别问我为什么是这个,因为我也是跟着别人做的!
常规步骤,走起!
一、概念定义
计数器的定义很简单,这里的话用我自己的理解就是用一个变量去记录程序中某个需要记录的东西,比如循环次数,某个数出现的次数了等;
相信大家其实在很多题目中都遇到过需要返回一个变量次数的问题,这些问题也就是计数器常用的位置;
在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)遍历结束后返回即可。
三、总结反思
计数器看起来很简单,但其实在程序里也是占据了很重要的一部分,以上的题目也只是一些简单的应用,其他的就需要大家在日常刷题中去总结,去积累!
陆陆续续刷题一段时间了,之所以把这些写出来,也是希望记录一下自己的刷题过程,如果能帮助到需要的人,那我也会很激动的!
都看到这里了,点个赞再走吧!谢谢!