Skip to content

Latest commit

 

History

History

2150.Find All Lonely Numbers in the Array

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

给你一个整数数组 nums 。如果数字 x 在数组中仅出现 一次 ,且没有 相邻 数字(即,x + 1x - 1)出现在数组中,则认为数字 x孤独数字

返回 nums 中的 所有 孤独数字。你可以按 任何顺序 返回答案。

 

示例 1:

输入:nums = [10,6,5,8]
输出:[10,8]
解释:
- 10 是一个孤独数字,因为它只出现一次,并且 9 和 11 没有在 nums 中出现。
- 8 是一个孤独数字,因为它只出现一次,并且 7 和 9 没有在 nums 中出现。
- 5 不是一个孤独数字,因为 6 出现在 nums 中,反之亦然。
因此,nums 中的孤独数字是 [10, 8] 。
注意,也可以返回 [8, 10] 。

示例 2:

输入:nums = [1,3,5,3]
输出:[1,5]
解释:
- 1 是一个孤独数字,因为它只出现一次,并且 0 和 2 没有在 nums 中出现。
- 5 是一个孤独数字,因为它只出现一次,并且 4 和 6 没有在 nums 中出现。
- 3 不是一个孤独数字,因为它出现两次。
因此,nums 中的孤独数字是 [1, 5] 。
注意,也可以返回 [5, 1] 。

 

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 106

解法

方法一

class Solution:
    def findLonely(self, nums: List[int]) -> List[int]:
        counter = Counter(nums)
        ans = []
        for num, cnt in counter.items():
            if cnt == 1 and counter[num - 1] == 0 and counter[num + 1] == 0:
                ans.append(num)
        return ans
class Solution {

    public List<Integer> findLonely(int[] nums) {
        Map<Integer, Integer> counter = new HashMap<>();
        for (int num : nums) {
            counter.put(num, counter.getOrDefault(num, 0) + 1);
        }
        List<Integer> ans = new ArrayList<>();
        counter.forEach((k, v) -> {
            if (v == 1 && !counter.containsKey(k - 1) && !counter.containsKey(k + 1)) {
                ans.add(k);
            }
        });
        return ans;
    }
}
class Solution {
public:
    vector<int> findLonely(vector<int>& nums) {
        unordered_map<int, int> counter;
        for (int num : nums) ++counter[num];
        vector<int> ans;
        for (auto& e : counter) {
            int k = e.first, v = e.second;
            if (v == 1 && !counter.count(k - 1) && !counter.count(k + 1)) ans.push_back(k);
        }
        return ans;
    }
};
func findLonely(nums []int) []int {
	counter := make(map[int]int)
	for _, num := range nums {
		counter[num]++
	}
	var ans []int
	for k, v := range counter {
		if v == 1 && counter[k-1] == 0 && counter[k+1] == 0 {
			ans = append(ans, k)
		}
	}
	return ans
}
function findLonely(nums: number[]): number[] {
    let hashMap: Map<number, number> = new Map();
    for (let num of nums) {
        hashMap.set(num, (hashMap.get(num) || 0) + 1);
    }
    let ans: Array<number> = [];
    for (let [num, count] of hashMap.entries()) {
        if (count == 1 && !hashMap.get(num - 1) && !hashMap.get(num + 1)) {
            ans.push(num);
        }
    }
    return ans;
}