algorithm-base/animation-simulation/求次数问题/只出现一次的数.md

621 lines
16 KiB
Java
Raw Normal View History

2021-07-23 15:44:19 +00:00
> **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
2021-03-20 08:44:27 +00:00
>
>
>
2021-07-23 15:44:19 +00:00
> <u>[****](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
2021-03-20 08:44:27 +00:00
#### [136. ](https://leetcode-cn.com/problems/single-number/)
2021-03-19 07:35:25 +00:00
>
1:
> : [2,2,1]
> : 1
2:
> : [4,1,2,1,2]
> : 4
2021-07-17 15:59:56 +00:00
~
2021-03-19 07:35:25 +00:00
### HashMap
####
2021-07-17 15:59:56 +00:00
HashMap
2021-03-19 07:35:25 +00:00
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/哈希表解法.1kefww8xsig0.png)
####
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
//特殊情况
if (nums.length == 1) {
return nums[0];
}
//HashMap
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
2021-07-17 15:59:56 +00:00
//将其存入哈希表中含义为若该元素不存在则存入表中并计数为1若已经存在获取次数并加1
2021-03-19 07:35:25 +00:00
for (int x : nums) {
map.put(x , map.getOrDefault(x,0) + 1);
}
//遍历出出现次数为1的情况
for (int y : map.keySet()) {
if(map.get(y) == 1){
return y;
}
2021-07-17 15:59:56 +00:00
}
2021-03-19 07:35:25 +00:00
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
//特殊情况
if (nums.size() == 1) {
return nums[0];
}
//HashMap
unordered_map<int,int> map;
//将其存入哈希表中含义为若该元素不存在则存入表中并计数为1若已经存在获取次数并加1
for (int x : nums) {
if (map.find(x) == map.end()) {
map.insert({x, 0});
}
map[x] += 1;
}
//遍历出出现次数为1的情况
for (int y : nums) {
if(map.at(y) == 1){
return y;
}
}
return -1;
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
//特殊情况
if (nums.length === 1) {
return nums[0];
}
//HashMap
map = {};
//将其存入哈希表中含义为若该元素不存在则存入表中并计数为1若已经存在获取次数并加1
for (let x of nums) {
if (!(x in map)) {
map[x] = 0;
}
2021-07-23 15:44:19 +00:00
map[x] += 1;
}
//遍历出出现次数为1的情况
for (let key in map) {
if (map[key] === 1) {
return key;
}
2021-07-23 15:44:19 +00:00
}
};
```
Python Code:
2021-07-17 15:59:56 +00:00
```python
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#
if len(nums) == 1:
return nums[0]
# HashMap
map_ = {}
# 11
for x in nums:
map_.setdefault(x, 0)
map_[x] += 1
# 1
for y, count in map_.items():
if count == 1:
return y
```
2021-07-27 18:26:32 +00:00
Go Code:
```go
func singleNumber(nums []int) int {
if len(nums) == 1 {
return nums[0]
}
m := map[int]int{}
for _, x := range nums {
m[x]++
}
for k, v := range m {
if v == 1 {
return k
}
}
return 0
}
```
2021-03-19 07:35:25 +00:00
###
####
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/排序.6sp72k3iaqw0.gif)
####
2021-07-17 15:59:56 +00:00
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
if (nums.length == 1){
return nums[0];
}
//排序
Arrays.sort(nums);
for (int i = 1; i < nums.length-1; i+=2){
2021-07-17 15:59:56 +00:00
if (nums[i] != nums[i-1]){
2021-03-19 07:35:25 +00:00
return nums[i-1];
}
}
return nums[nums.length-1];
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
//排序
sort(nums.begin(), nums.end());
for (int i = 1; i < nums.size() - 1; i += 2){
if (nums[i] != nums[i - 1]){
return nums[i - 1];
}
}
return nums[nums.size() - 1];
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
// 排序
nums.sort();
for (let i = 1; i < nums.length - 1; i += 2) {
if (nums[i] != nums[i - 1]) {
return nums[i - 1];
}
2021-07-23 15:44:19 +00:00
}
return nums[nums.length - 1];
};
```
2021-07-17 15:59:56 +00:00
Python Code:
```python
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#
nums.sort()
for i in range(1, len(nums), 2):
if nums[i] != nums[i - 1]:
return nums[i - 1]
return nums[len(nums) - 1]
```
2021-07-27 18:26:32 +00:00
Go Code:
```go
func singleNumber(nums []int) int {
if len(nums) == 1 {
return nums[0]
}
sort.Ints(nums)
for i := 1; i < len(nums) - 1; i+=2 {
if nums[i] == nums[i - 1] {
continue
} else {
return nums[i - 1]
}
}
return nums[len(nums) - 1]
}
```
2021-03-19 07:35:25 +00:00
### HashSet
####
HashSet HashSet HashMap HashSet HashSet HashSet () HashSet HashSet
![HashSet](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/HashSet.4b6dcxwj07c0.gif)
####
2021-07-17 15:59:56 +00:00
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
HashSet<Integer> set = new HashSet<>();
//循环遍历
for (int x : nums){
//已经存在,则去除
if(set.contains(x)){
set.remove(x);
//否则存入
} else {
2021-03-19 07:35:25 +00:00
set.add(x);
}
}
//返回仅剩的一个元素
return set.iterator().next();
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_set<int> set;
//循环遍历
for (int x : nums) {
//已经存在,则去除
if (set.find(x) == set.end()) {
set.insert(x);
//否则存入
} else {
set.erase(x);
}
}
//返回仅剩的一个元素
return *set.begin();
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
let set = new Set();
//循环遍历
for (let x of nums) {
//已经存在,则去除
if (set.has(x)) {
set.delete(x);
//否则存入
} else {
set.add(x);
}
2021-07-23 15:44:19 +00:00
}
return set.values().next().value;
};
```
2021-07-17 15:59:56 +00:00
Python Code:
```python
class Solution:
def singleNumber(self, nums: List[int]) -> int:
set_ = set()
#
for x in nums:
#
if x in set_:
set_.remove(x)
#
else:
set_.add(x)
#
return set_.pop()
```
2021-03-19 07:35:25 +00:00
###
####
使
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/栈.6mzstgebww00.gif)
####
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
Stack<Integer> stack = new Stack<>();
for (int x : nums){
if (stack.isEmpty()) {
stack.push(x);
continue;
}
2021-07-17 15:59:56 +00:00
//不同时直接跳出
2021-03-19 07:35:25 +00:00
if (stack.peek() != x) {
break;
}
2021-07-17 15:59:56 +00:00
//相同时出栈
2021-07-23 15:44:19 +00:00
stack.pop();
2021-03-19 07:35:25 +00:00
}
return stack.peek();
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
stack<int> stack;
for (int x: nums) {
if (stack.empty()) {
stack.push(x);
continue;
}
//不同时直接跳出
if (stack.top() != x) {
break;
}
//相同时出栈
stack.pop();
}
return stack.top();
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
nums.sort();
let stack = [];
for (let x of nums) {
if (!stack.length) {
stack.push(x);
continue;
}
//不同时直接跳出
if (stack[0] !== x) {
break;
}
2021-07-23 15:44:19 +00:00
//相同时出栈
stack.pop();
}
return stack[0];
};
```
2021-07-17 15:59:56 +00:00
Python Code:
```python
from collections import deque
class Solution:
def singleNumber(self, nums: List[int]) -> int:
if len(nums) == 1:
return nums[0]
nums.sort()
stack = deque()
for x in nums:
if not stack:
stack.append(x)
continue
#
2021-07-17 15:59:56 +00:00
if stack[-1] != x:
break
#
2021-07-17 15:59:56 +00:00
stack.pop()
return stack[-1]
```
2021-03-19 07:35:25 +00:00
###
####
2021-07-23 15:44:19 +00:00
HashSet HashSet setsumnumsum setsum \* 2 - numsum
2021-03-19 07:35:25 +00:00
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/求和解法.2tds49a3vzq0.png)
2021-07-23 15:44:19 +00:00
SetSum \* 2 - NumSum = z
2021-03-19 07:35:25 +00:00
####
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
HashSet<Integer> set = new HashSet<>();
int setsum = 0;
int numsum = 0;
for (int x : nums) {
//所有元素的和
2021-07-23 15:44:19 +00:00
numsum += x;
2021-03-19 07:35:25 +00:00
if (!set.contains(x)) {
//HashSet内元素的和
2021-07-23 15:44:19 +00:00
setsum += x;
2021-03-19 07:35:25 +00:00
}
set.add(x);
2021-07-23 15:44:19 +00:00
}
2021-03-19 07:35:25 +00:00
//返回值
return setsum * 2 - numsum;
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_set<int> set;
int setsum = 0;
int numsum = 0;
for (int x : nums) {
//所有元素的和
2021-07-23 15:44:19 +00:00
numsum += x;
if (set.find(x) == set.end()) {
//HashSet内元素的和
2021-07-23 15:44:19 +00:00
setsum += x;
}
set.insert(x);
2021-07-23 15:44:19 +00:00
}
//返回值
return setsum * 2 - numsum;
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
let set = new Set();
let setsum = 0;
let numsum = 0;
for (let x of nums) {
//所有元素的和
numsum += x;
if (!set.has(x)) {
setsum += x;
}
2021-07-23 15:44:19 +00:00
//HashSet内元素的和
set.add(x);
}
//返回值
return 2 * setsum - numsum;
};
```
2021-07-17 15:59:56 +00:00
Python Code:
```python
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return 2 * sum(set(nums)) - sum(nums)
```
2021-03-19 07:35:25 +00:00
###
####
^
2021-07-23 15:44:19 +00:00
> XOR^ 1 0
2021-03-19 07:35:25 +00:00
2021-07-23 15:44:19 +00:00
> 0 a0 = a
> 0aa = 0
2021-03-19 07:35:25 +00:00
> aba = (aa)b = 0b = b
![](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/异或运算.1myeo11xgqo0.png)
1 0 0
![image-20201129120648802](https://cdn.jsdelivr.net/gh/tan45du/tan45du.github.io.photo@master/photo/image-20201129120648802.2ajgng6zzd7o.png)
####
2021-07-17 15:59:56 +00:00
Java Code:
2021-03-19 07:35:25 +00:00
```java
class Solution {
public int singleNumber(int[] nums) {
int num = 0;
//异或
2021-07-23 15:44:19 +00:00
for (int x : nums) {
2021-03-19 07:35:25 +00:00
num ^= x;
}
return num;
}
}
```
C++ Code:
```cpp
class Solution {
public:
int singleNumber(vector<int>& nums) {
int num = 0;
//异或
for (vector<int>::iterator x = nums.begin(); x != nums.end(); x++) {
num ^= *x;
}
return num;
}
};
```
JS Code:
```javascript
2021-07-23 15:44:19 +00:00
var singleNumber = function (nums) {
//异或
return nums.reduce((num, x) => (num ^= x));
};
```
2021-07-17 15:59:56 +00:00
Python Code:
```python
from functools import reduce
class Solution:
def singleNumber(self, nums: List[int]) -> int:
#
return reduce(lambda num, x: num ^ x, nums, 0)
2021-07-17 15:59:56 +00:00
```
2021-07-27 18:26:32 +00:00
Go Code:
```go
func singleNumber(nums []int) int {
res := 0
for _, x := range nums {
res ^= x
}
return res
2021-07-29 02:33:38 +00:00
2021-07-27 18:26:32 +00:00
}
```
2021-07-23 15:44:19 +00:00
6