①题目:
力扣137. 只出现一次的数字 IIhttps://leetcode-cn.com/problems/single-number-ii/
②代码:
//对数组排序后,由于数字个数非1即3,故而当一个数字与其前后都不同,则为答案。
class Solution {
public int singleNumber(int[] nums) {
int length=nums.length;
if (length<3) //nums只含一个元素
return nums[0];
Arrays.sort(nums);
if (nums[0]!=nums[1]) //第一个元素为答案
return nums[0];
if (nums[length-1]!=nums[length-2]) //最后一个元素为答案
return nums[length-1];
for (int i = 1; i < length-2; i++) {
if (nums[i]!=nums[i-1])
if (nums[i]!=nums[i+1])
return nums[i];
}
return -1;
}
}
class Solution {
public int singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>(); //将数字及其个数存入HashMap
for (int i : nums) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
Set<Integer> integers = map.keySet();
for (Integer i:integers){
if (map.get(i)==1) //找的个数为value=1的key
return i;
}
return -1;
}
}
③运行: