【LeetCode】#136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
方法一:暴力!!! public int singleNumber(int[] nums) { for(int i = 0; i < nums.length; i++){ for(int j = 0; j < nums.length; j++){ if(nums[i] == nums [j] && i != j){ break; }else{ if (j == nums.length - 1){ if(i == j){ return nums[i]; }else{ if(nums[i] == nums [j])break; else{ return nums[i]; } } } if (nums[i] != nums [j] && i != j){ continue; } } } } return -1; }
方法二:哈希表判断是否只出现一次 public int singleNumber(int[] nums) { Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i:nums){ Integer count = map.get(i); count = count == null ? 1 : ++count; map.put(i,count); } for(int i:map.keySet()){ int count = map.get(i); if(count == 1){ return i; } } return -1; }
方法三:无敌位运算 因为a^a=0 a^0=a class Solution { public int singleNumber(int[] nums) { int single = 0; for (int num : nums) { single ^= num; } return single; } }
知识点:
位运算异或^:a^a=0 a^0=a
具体位运算链接:位运算(&、|、^、~、>>、 | 菜鸟教程 (runoob.com)
总结:
多思考,使用运算效率最高。
本文作者:Canyooo
本文链接:https://www.cnblogs.com/canyooo/p/15317734.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步