算法学习小结-只出现一次的数字
2022/1/13 14:34:08
本文主要是介绍算法学习小结-只出现一次的数字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
样例1
输入: [2,2,1]
输出: 1
样例2
输入: [4,1,2,1,2]
输出: 4
说明
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
分析
方案一:双重循环遍历(暴力解法)
class Solution { public int singleNumber(int[] nums) { for(int i=0;i<nums.length;i++){ int flag=0; for(int j=0;j<nums.length;j++){ if(nums[i]==nums[j]){ flag++; } } if(flag==1)return nums[i]; } return 0; } }
方案二:排序遍历找不同
class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); if(nums.length<2) return nums[0]; if(nums[0]!=nums[1]) return nums[0]; else if(nums[nums.length-1]!=nums[nums.length-2]) return nums[nums.length-1]; for(int i=1;i<nums.length-1;i++){ if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]){ return nums[i]; } } return 0; } }
方案三:异或(长知识了,还能这样)
简述:异或运算的特征:
任何数与0异或都是其本身
任何数与自己做异或都是0
异或运算满足交换律:a ⊕ b ⊕ a = b ⊕ a ⊕ a = b ⊕ (a ⊕ a)= b ⊕ 0 = b
class Solution { public int singleNumber(int[] nums) { int res=0; for(int num:nums){ res ^= num; } return res; } }
方案四:哈希表
class Solution { public int singleNumber(int[] nums) { Map<Integer,Integer> map=new HashMap(); for(Integer i:nums){ Integer count=map.get(i); count = count == null ? 1 : ++count; map.put(i,count); } for(Integer i:map.keySet()){ if(map.get(i)==1) return i; } return 0; } }
这篇关于算法学习小结-只出现一次的数字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API