题目分析:
给定一个数组,里面只有一个数只出现一次,其他的数均出现两次,请找出这个只出现一次的数。
解题思路:
方法1 利用map实现
1)遍历整个数组,统计数组中每个数出现的次数,并将其保存在map
2)遍历数组中元素,查看map中对应元素出现的次数,如果出现只出现一次,则返回次元素,并结束程序即可。
方法2 利用异或实现
由于两个相同的数进行异或,结果为0,故将所有的数进行异或操作,最后得到的数一定为数组中只出现一次的数。
实现程序
C++版本
class Solution { public: //方法1 利用map实现 int singleNumber(vector<int>& nums) { map<int, int> map; // 统计数组中每个元素出现的次数 for (int i = 0; i < nums.size(); i++) { map[nums[i]]++; } // 找出数组中只出现一次的元素 for (int i = 0; i < nums.size(); i++) { if (map[nums[i]] == 1) return nums[i]; } return 0; } //方法2 利用异或操作实现 int singleNumber1(vector<int>& nums) { int i; int result = nums[0]; // 对数组中所有的元素执行异或操作 for(i = 1; i < nums.size(); i++) { result ^= nums[i]; } // 返回数组中只出现一次的元素 return result; } };
Java版本
// 方法1 利用map实现 public int singleNumber(int[] nums){ Map<Integer, Integer> mp = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++){ if (mp.containsKey(nums[i])){ mp.remove(nums[i]); }else{ mp.put(nums[i], i); } } for (Map.Entry<Integer, Integer> m : mp.entrySet()){ return m.getKey(); } return 0; } // 方法2 利用异或操作实现 public int singleNumber1(int[] nums){ int result = 0; for (int i = 0; i < nums.length; i++){ result ^= nums[i]; } return result; }
leetcode_136 Single Number
最新推荐文章于 2022-05-07 12:01:44 发布