首页 > 其他分享 >练习:找出出现次数最多的数字

练习:找出出现次数最多的数字

时间:2023-09-10 17:22:57浏览次数:36  
标签:找出 nums re 练习 dic 次数 tail low

题: 给定一个长度为 n 的数组 nums,请找出其中出现次数大于 n/2 向下取整的元素。
'''
如:
nums = [1,2,1,2,1]
出现最多的元素是1
长度为5,5/2 向下取整是2, 1出现的次数大于2
'''
### 分治算法
 1 class Solution(object):
 2     def findnum(self,nums):
 3         def func(low,high):
 4             # 当二者相等的时候,说明长度为1,可以直接返回当前元素
 5             if low==high:
 6                 return nums[low]
 7             # 找到中位
 8             mid=low+(high-low)//2
 9             # 前半部分和后半部分
10             head=func(low,mid)
11             tail=func(mid+1,high)
12             # 如果相等,说明已经找到
13             if head==tail:
14                 return tail
15             # 统计出现的次数
16             head_count=sum(1 for i in range(low,high+1) if nums[i]==head)
17             tail_count = sum(1 for i in range(low, high+1) if nums[i]==tail)
18             return head if head_count>tail_count else tail
19         return func(0,len(nums)-1)
20 
21 # eg.
22 nums=[1,4,2,3,4,4,4]
23 demo=Solution()
24 acount=demo.findnum(nums)
25 print(acount) # 4
### 字典法
 1 class Solution_Dic(object):
 2     def findnum(self,nums):
 3         dic={}
 4         # 将 nums 中每个数字作为key,将每个数字出现的次数作为value,将nums 转换成一个字典dic
 5         for i in nums:
 6             dic[i]=dic.get(i,0)+1
 7         # 获取字典dic 中value 的最大值所对应的键
 8         return max(dic.keys(),key=dic.get)
 9 
10 # eg.
11 nums=[1,4,2,3,4,4,4]
12 demo2=Solution_Dic()
13 acount_dic=demo2.findnum(nums)
14 print(acount_dic) # 4
### 空间优化解法
'''
# 出现的次数大于其他数字,当遍历到某一个数字时,如果等于re ,则次数加1;如果不等于re ,则次数减1;
# 当次数已经为0 时,则将下一个数字赋值给re ,并且times 更新为1;
# 最终留下来的re 就是出现次数最多的数字。
'''
 1 class SolutionK(object):
 2     def findnums(self,nums):
 3         times=1
 4         re=nums[0]
 5         for i in range(1,len(nums)):
 6             if times==0:
 7                 re=nums[i]
 8                 times+=1
 9             elif nums[i]==re:
10                 times+=1
11             else:
12                 times-=1
13         return re

2023-9-10笔记

标签:找出,nums,re,练习,dic,次数,tail,low
From: https://www.cnblogs.com/yuntimer/p/17691524.html

相关文章

  • 练习:冒泡排序法
    冒泡排序法:是在每一轮排序结束之后都有一个体积最大的气泡冒出来,这也正是冒泡排序法名字的由来。(1)从集合第一个元素开始,每两个相邻的元素进行大小比较,令数值较大的元素向后移动,即交换两个元素的位置,不断对比直至数组的末尾。经过第一趟对比,找到整个集合中最大的元素,并将其移动到......
  • python爬虫练习2-百度热榜
    importrequestsfromlxmlimportetreeurl='https://top.baidu.com/board?tab=realtime'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/116.0.0.0Safari/537.36&......
  • MySQL查询语句及练习题
    查询记录查询数据库表中列的数据SELECT*,列名FROM表名WHERE条件GROUPBY分组HAVING过滤ORDERBY排序LIMIT分页查询分组查询GROUPBY子句用于根据一个或多个列对结果进行分组--统计员工表中职位的分类信息SELECTJ职位FROM员工表GROUPBY职位;--统计员工表......
  • MySQL查询命令练习(二)
    详细的命令总结及用法点这里就好了^_^      ⬇⬇⬇《MySQL命令总结》看完命令用法看看下面的题吧根据题目要求,写出SQL语句namecoursescore张三语文85张三数学82李四语文85李四数学81李四英语88王五语文75王五数学85王五化学99创建表并验证CREATETABLEstudent(name......
  • 亿信ABI函数练习
    1、常见函数NOW():获取当前系统时分秒TODAY():获取当前系统年月日DATETOST():年月日转换成字符串STR():数字转换成字符串STRCAT():字符串拼接使用CASE加SUM进行统计求和,count进行统计个数报表模板没有设置分辨率的地方,只有酷屏跟wbi上可以设置分辨率地图绑定表格:基础属性—>区域绑......
  • 【js】【统计次数】静态页面访问次数 js页面请求次数统计
    ​效果: 源码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>静态页面访问量统计</title></head><body><scripttype="text/javascript">varpgcoun......
  • 用来练习sql的库表创建sql文件
    1.创建work.sql文件,填写以下内容--MySQLdump10.13Distrib5.7.43,forLinux(x86_64)----Host:localhostDatabase:work----------------------------------------------------------Serverversion 5.7.43/*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACT......
  • 牛客练习赛 115 记录
    牛客练习赛115赛时AC题目A.Mountainsequence点击查看代码/*1.根据山峰数列的定义,用排列组合知识去计算即可。*/#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintmaxn=1e5+5;intt,n;inta[maxn];llans;constintMOD=998244353;......
  • MySQL查询命令练习(一)
    如果需要详细的命令总结在我--软件测试--个人分类里,不想翻阅的话点这个连接也可以哈《MySQL命令总结》https://blog.51cto.com/u_16239770/7383954添加记录语法格式--指定列插入数据INSERTINTO表名(列名1,列名2)VALUES(列值1,列值2);--全部列插入数据 INSERTINTO表名VALUE......
  • python爬虫练习1-百度图片
     写了一个简单的爬图片练习importrequestsimportosdefbd_img(title1):url=f'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10755979809828115852&ipn=rj&ct=201326592&is=&fp=result&fr=&word={title1}&queryWord......