题号:136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1 复制代码
示例 2:
输入: [4,1,2,1,2] 输出: 4
解题思路:
1、map法:遍历数组存map,遇相同元素则从map中删除,最后map输入即为解题答案
2、异或法:异或运算 相同数字异或为0 【如下:debug演示】
//map法 func singleNumber(nums []int) int { var m = make(map[int]int) for i := 0; i < len(nums); i++ { _, ok := m[nums[i]] if ok { //删除重复元素 //delete(m, nums[i]) } else { //存map m[nums[i]] = i } } for k := range m { return k } return -1 }
//异或运算 相同数字异或为0 func singleNumber(nums []int) int { res := 0 for _, i := range nums { res = res ^ i } return res }
如下演示:
网络异常,图片无法展示
|
往期回顾:
【1】LeetCode-122. 买卖股票的最佳时机 II(Goland实现)
【2】LeetCode-剑指 Offer 03. 数组中重复的数字(Goland实现)
【3】LeetCode-58. 最后一个单词的长度(Goland实现)