当前位置: 首页 > news >正文

网站开发图片压缩郑州网站建设推荐美软科技

网站开发图片压缩,郑州网站建设推荐美软科技,长沙线上引流公司,网上最好购物网站描述#xff1a; 一个整型数组里除了两个数字只出现一次#xff0c;其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求#xff1a;空间复杂度 O(1)#xff0c;时间复杂度O(n)。 题目传送门 is here 思路#xff1a; 方法一#xff1a;最简单的思路就… 描述 一个整型数组里除了两个数字只出现一次其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 要求空间复杂度 O(1)时间复杂度O(n)。 题目传送门 is here 思路 方法一最简单的思路就是使用字典记录每个数的出现次数最后再遍历一遍字典出现次数为1的数。空间复杂度 O(n)时间复杂度O(n)。空间复杂度不满足题目条件。 :)小妙招使用字典的mydict[key] mydict.get(key, 0)函数可以轻松将字典不存在的值设置为初始值0。 方法二还是要用一个字典记录但是如果出现第二次就remove掉因此最后字典就只剩下出现一次的数值。空间复杂度 O(n)时间复杂度O(n)。空间复杂度不满足题目条件。 基础知识 使用mydict.get(key)获取key值无就会返回None。 方法三利用 异或 和 与 运算。 假设只出现一次的数为ab。 大体思路分为三个步骤 步骤一 整个数组的数都异或一遍最终的值为c a^b。 步骤二 打住先花30秒思考如何利用c来得出a和b …1s… …2s… …3s… . . …30s… okk 想到了吗反正我没想到。[尬住哈] 答案还记得异或特点是不同为1吗a, b 两个不同的数异或出来肯定会有至少某一位数是1。对吧。 上栗子 100 ^ 110 010 中间那位不一样 001 ^ 100 101 头尾两位不一样。 所以我们可以利用c 中为1的那一位用来区分出 a 和 b。 具体做法就是找为1的那一位将整个数组分成两组数一组含a和重复数 另一组含b和重复数。 至此橘事已定。 步骤三 最后梅开二度再来一遍异或。分别对这两组数进行异或运算最终得出一组异或值为a, 另一组的异或值为b。 回忆那死去的数学 异或特点就是两个相同的数异或结果为0a ^ a 0 相互抵消掉了。一个数异或0结果不变。 b ^ 0 b 因此1 ^ 1 ^ 4 4 与操作特点相同为1不同为0可以区分某个位上是0还是1。举个栗子使用001分别与上000, 001, 010, 011 可以将一组数区分成000、010 和 001,011两组数这两组数的特点是最后一位不相同。 代码 #from typing import List class Solution:# 方法一 count每个数的次数def FindNumsAppearOnce1(self , nums: List[int]) - List[int]:# write code herecnt {}for item in nums:cnt[item] cnt.get(item, 0) 1print(cnt)result []for k ,v in cnt.items():if v 1:result.append(k)return sorted(result)# 方法二出现过就removedef FindNumsAppearOnce2(self , nums: List[int]) - List[int]:# write code herecnt {}for item in nums:if cnt.get(item) None:cnt[item] 1else:del cnt[item]result []for k,_ in cnt.items():result.append(k)return sorted(result)# 方法三使用异或def FindNumsAppearOnce(self , nums: List[int]) - List[int]:# 步骤一全部异或一遍tmp nums[0]for i in range(1,len(nums)):tmp tmp ^ nums[i]print(tmp)# 步骤二得出只有两个数得异或之后从低位开始选择第一个为1的那位可以对这两个数进行分组group_num 1while group_num tmp 0:group_num group_num 1print(bin(group_num))# 步骤三进行分组group1 ,group2 0,0list1 ,list2 [],[] # 这两个list只是拿来看看分组情况,最后[1,4,1,6] 会分成 [1,4,1] [6]for item in nums:if item group_num 0:list1.append(item)group1 group1^item # 对组1的数进行异或else:list2.append(item)group2 group2^item # 对组2的数进行异或print(group: ,list1, list2)if group1 group2:return [group2, group1]else:return [group1, group2]#so Solution() #exp1 [1,4,1,6] #print(so.FindNumsAppearOnce(exp1)) 昨天做的题今天写个博客梳理一下。方法三里面考到的数学知识已经忘了复习起来花了不少时间。本来用方法一和方法二就能通过了觉得方法三没必要了。但是仔细一看空间复杂度居然是O(1) 那方法一、二的空间复杂度是O(n)老不达标了。 牛客网放我过了但是比赛或者面试的oj就没有那么仁慈了。因此还是要重视起时间复杂度和空间复杂度。有一位比赛大佬和我说有时候呢可以从这个时间复杂度还有数组的规模来判断用的是什么解法。比如时间复杂度为1s数组长度10^9次方。那肯定只能遍历一遍数组了于是乎两层for循环那肯定过不了的。
http://www.pierceye.com/news/225715/

相关文章:

  • 云南网站建设招商建设公司网站计入哪个科目
  • 网站备案在哪里查询海外市场推广方案
  • 中诺建设集团有限公司网站微信商家小程序收费吗
  • 沙井品牌网站建设南宁网站提升排名
  • 网站空间备案要多久数商云是外包吗
  • 网站设计公司需要什么资质网站建设所需服务器
  • 织梦cms仿网站教程怎么做网站板块
  • 建设厅网站更改登陆密码wordpress主题 水墨
  • 彩云小梦ai写作网站机关网站建设情况汇报
  • 合肥专业网站优化手机界面设计素材
  • 台州网站建设惠店王烨烨
  • 工程建设比选公告固价方式网站wordpress html5的关系
  • 广州市网站建设 乾图信息科技潍坊市建设监理协会网站
  • 网站建优化网页脚本设计
  • 手机能访问电脑上自己做的网站吗网页设计作品到哪个网站
  • 网站推广成功案例城乡住房建设部官网查询
  • 养殖类网站模板那个网站的公众后推广做的好
  • 网站开发属于什么类型软件建站之星如何建网站
  • 微信做淘宝优惠券但网站是怎么建设但深圳市深圳市住房和建设局网站
  • 后端网站开发免费域名 网站
  • 综合信息网站建设方案网页浏览器排行榜前十名
  • 北京网站开发建设 58同城网站建设改版公司
  • 如何做网站预览网站设计线框图
  • 电子商务的网站的建设内容珠海自适应网站
  • 站酷海洛设计网站官网wordpress选了中文还是英文
  • 软件最全网站如何上传织梦做的网站
  • 做系统前的浏览网站能找回吗湖南网站建设价位
  • 工程服务建设网站那个网站可以做视频app制作
  • 国外网站访问速度慢企业网络营销策划案
  • 网站建设 亿安网络wordpress 调取菜单