Skip to content

Commit 961bc93

Browse files
committed
feat: add solutions to lc problem: No.1748
No.1748.Sum of Unique Elements
1 parent 51c0ad9 commit 961bc93

File tree

8 files changed

+135
-147
lines changed

8 files changed

+135
-147
lines changed

solution/1700-1799/1748.Sum of Unique Elements/README.md

Lines changed: 49 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@
4646

4747
<!-- 这里可写通用的实现逻辑 -->
4848

49-
- 计数
50-
- 定义一个计数器 counter,存放数组每个元素出现的次数。
51-
- 然后遍历 counter 中每个元素,累加次数为 1 的所有下标即可。
52-
- 哈希表
53-
- 遍历 `nums`,累加元素,并使用哈希表记录数字出现的次数。
54-
- 当数字二次出现时,从累加中删减,二次以上则无视。
49+
**方法一:计数**
50+
51+
我们可以用数组或哈希表 `cnt` 统计数组 `nums` 中每个数字出现的次数,然后遍历 `cnt`,对于出现次数为 1 的数字,将其加入答案。
52+
53+
遍历结束后,返回答案即可。
54+
55+
时间复杂度 $O(n)$,空间复杂度 $O(M)$。其中 $n$ 和 $m$ 分别是数组 `nums` 的长度和 `nums` 中的最大值。
5556

5657
<!-- tabs:start -->
5758

@@ -62,8 +63,8 @@
6263
```python
6364
class Solution:
6465
def sumOfUnique(self, nums: List[int]) -> int:
65-
counter = Counter(nums)
66-
return sum(num for num, cnt in counter.items() if cnt == 1)
66+
cnt = Counter(nums)
67+
return sum(x for x, v in cnt.items() if v == 1)
6768
```
6869

6970
### **Java**
@@ -73,14 +74,14 @@ class Solution:
7374
```java
7475
class Solution {
7576
public int sumOfUnique(int[] nums) {
76-
int[] counter = new int[101];
77-
for (int num : nums) {
78-
++counter[num];
77+
int[] cnt = new int[101];
78+
for (int x : nums) {
79+
++cnt[x];
7980
}
8081
int ans = 0;
81-
for (int i = 0; i < 101; ++i) {
82-
if (counter[i] == 1) {
83-
ans += i;
82+
for (int x = 0; x < 101; ++x) {
83+
if (cnt[x] == 1) {
84+
ans += x;
8485
}
8586
}
8687
return ans;
@@ -94,12 +95,16 @@ class Solution {
9495
class Solution {
9596
public:
9697
int sumOfUnique(vector<int>& nums) {
97-
vector<int> counter(101);
98-
for (int num : nums) ++counter[num];
98+
int cnt[101]{};
99+
for (int& x : nums) {
100+
++cnt[x];
101+
}
99102
int ans = 0;
100-
for (int i = 0; i < 101; ++i)
101-
if (counter[i] == 1)
102-
ans += i;
103+
for (int x = 0; x < 101; ++x) {
104+
if (cnt[x] == 1) {
105+
ans += x;
106+
}
107+
}
103108
return ans;
104109
}
105110
};
@@ -108,66 +113,58 @@ public:
108113
### **Go**
109114
110115
```go
111-
func sumOfUnique(nums []int) int {
112-
counter := make([]int, 101)
113-
for _, num := range nums {
114-
counter[num]++
116+
func sumOfUnique(nums []int) (ans int) {
117+
cnt := [101]int{}
118+
for _, x := range nums {
119+
cnt[x]++
115120
}
116-
ans := 0
117-
for i := 0; i < 101; i++ {
118-
if counter[i] == 1 {
119-
ans += i
121+
for x := 0; x < 101; x++ {
122+
if cnt[x] == 1 {
123+
ans += x
120124
}
121125
}
122-
return ans
126+
return
123127
}
124128
```
125129

126130
### **TypeScript**
127131

128132
```ts
129133
function sumOfUnique(nums: number[]): number {
130-
let res = 0;
131-
const map = new Map();
132-
for (const num of nums) {
133-
if (map.has(num)) {
134-
if (map.get(num)) {
135-
map.set(num, false);
136-
res -= num;
137-
}
138-
} else {
139-
map.set(num, true);
140-
res += num;
134+
const cnt = new Array(101).fill(0);
135+
for (const x of nums) {
136+
++cnt[x];
137+
}
138+
let ans = 0;
139+
for (let x = 0; x < 101; ++x) {
140+
if (cnt[x] == 1) {
141+
ans += x;
141142
}
142143
}
143-
return res;
144+
return ans;
144145
}
145146
```
146147

147148
### **Rust**
148149

149-
- 计数
150-
151150
```rust
152151
impl Solution {
153152
pub fn sum_of_unique(nums: Vec<i32>) -> i32 {
154-
let mut arr = [0; 101];
155-
for num in nums {
156-
arr[num as usize] += 1;
153+
let mut cnt = [0; 101];
154+
for x in nums {
155+
cnt[x as usize] += 1;
157156
}
158-
let mut res = 0;
159-
for i in 1..101 {
160-
if arr[i] == 1 {
161-
res += i;
157+
let mut ans = 0;
158+
for x in 1..101 {
159+
if cnt[x] == 1 {
160+
ans += x;
162161
}
163162
}
164-
res as i32
163+
ans as i32
165164
}
166165
}
167166
```
168167

169-
- 哈希表
170-
171168
```rust
172169
use std::collections::HashMap;
173170

solution/1700-1799/1748.Sum of Unique Elements/README_EN.md

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,23 @@
5050
```python
5151
class Solution:
5252
def sumOfUnique(self, nums: List[int]) -> int:
53-
counter = Counter(nums)
54-
return sum(num for num, cnt in counter.items() if cnt == 1)
53+
cnt = Counter(nums)
54+
return sum(x for x, v in cnt.items() if v == 1)
5555
```
5656

5757
### **Java**
5858

5959
```java
6060
class Solution {
6161
public int sumOfUnique(int[] nums) {
62-
int[] counter = new int[101];
63-
for (int num : nums) {
64-
++counter[num];
62+
int[] cnt = new int[101];
63+
for (int x : nums) {
64+
++cnt[x];
6565
}
6666
int ans = 0;
67-
for (int i = 0; i < 101; ++i) {
68-
if (counter[i] == 1) {
69-
ans += i;
67+
for (int x = 0; x < 101; ++x) {
68+
if (cnt[x] == 1) {
69+
ans += x;
7070
}
7171
}
7272
return ans;
@@ -80,12 +80,16 @@ class Solution {
8080
class Solution {
8181
public:
8282
int sumOfUnique(vector<int>& nums) {
83-
vector<int> counter(101);
84-
for (int num : nums) ++counter[num];
83+
int cnt[101]{};
84+
for (int& x : nums) {
85+
++cnt[x];
86+
}
8587
int ans = 0;
86-
for (int i = 0; i < 101; ++i)
87-
if (counter[i] == 1)
88-
ans += i;
88+
for (int x = 0; x < 101; ++x) {
89+
if (cnt[x] == 1) {
90+
ans += x;
91+
}
92+
}
8993
return ans;
9094
}
9195
};
@@ -94,66 +98,58 @@ public:
9498
### **Go**
9599
96100
```go
97-
func sumOfUnique(nums []int) int {
98-
counter := make([]int, 101)
99-
for _, num := range nums {
100-
counter[num]++
101+
func sumOfUnique(nums []int) (ans int) {
102+
cnt := [101]int{}
103+
for _, x := range nums {
104+
cnt[x]++
101105
}
102-
ans := 0
103-
for i := 0; i < 101; i++ {
104-
if counter[i] == 1 {
105-
ans += i
106+
for x := 0; x < 101; x++ {
107+
if cnt[x] == 1 {
108+
ans += x
106109
}
107110
}
108-
return ans
111+
return
109112
}
110113
```
111114

112115
### **TypeScript**
113116

114117
```ts
115118
function sumOfUnique(nums: number[]): number {
116-
let res = 0;
117-
const map = new Map();
118-
for (const num of nums) {
119-
if (map.has(num)) {
120-
if (map.get(num)) {
121-
map.set(num, false);
122-
res -= num;
123-
}
124-
} else {
125-
map.set(num, true);
126-
res += num;
119+
const cnt = new Array(101).fill(0);
120+
for (const x of nums) {
121+
++cnt[x];
122+
}
123+
let ans = 0;
124+
for (let x = 0; x < 101; ++x) {
125+
if (cnt[x] == 1) {
126+
ans += x;
127127
}
128128
}
129-
return res;
129+
return ans;
130130
}
131131
```
132132

133133
### **Rust**
134134

135-
- Count
136-
137135
```rust
138136
impl Solution {
139137
pub fn sum_of_unique(nums: Vec<i32>) -> i32 {
140-
let mut arr = [0; 101];
141-
for num in nums {
142-
arr[num as usize] += 1;
138+
let mut cnt = [0; 101];
139+
for x in nums {
140+
cnt[x as usize] += 1;
143141
}
144-
let mut res = 0;
145-
for i in 1..101 {
146-
if arr[i] == 1 {
147-
res += i;
142+
let mut ans = 0;
143+
for x in 1..101 {
144+
if cnt[x] == 1 {
145+
ans += x;
148146
}
149147
}
150-
res as i32
148+
ans as i32
151149
}
152150
}
153151
```
154152

155-
- HashMap
156-
157153
```rust
158154
use std::collections::HashMap;
159155

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
class Solution {
22
public:
33
int sumOfUnique(vector<int>& nums) {
4-
vector<int> counter(101);
5-
for (int num : nums) ++counter[num];
4+
int cnt[101]{};
5+
for (int& x : nums) {
6+
++cnt[x];
7+
}
68
int ans = 0;
7-
for (int i = 0; i < 101; ++i)
8-
if (counter[i] == 1)
9-
ans += i;
9+
for (int x = 0; x < 101; ++x) {
10+
if (cnt[x] == 1) {
11+
ans += x;
12+
}
13+
}
1014
return ans;
1115
}
1216
};
Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
func sumOfUnique(nums []int) int {
2-
counter := make([]int, 101)
3-
for _, num := range nums {
4-
counter[num]++
1+
func sumOfUnique(nums []int) (ans int) {
2+
cnt := [101]int{}
3+
for _, x := range nums {
4+
cnt[x]++
55
}
6-
ans := 0
7-
for i := 0; i < 101; i++ {
8-
if counter[i] == 1 {
9-
ans += i
6+
for x := 0; x < 101; x++ {
7+
if cnt[x] == 1 {
8+
ans += x
109
}
1110
}
12-
return ans
11+
return
1312
}

solution/1700-1799/1748.Sum of Unique Elements/Solution.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Solution {
22
public int sumOfUnique(int[] nums) {
3-
int[] counter = new int[101];
4-
for (int num : nums) {
5-
++counter[num];
3+
int[] cnt = new int[101];
4+
for (int x : nums) {
5+
++cnt[x];
66
}
77
int ans = 0;
8-
for (int i = 0; i < 101; ++i) {
9-
if (counter[i] == 1) {
10-
ans += i;
8+
for (int x = 0; x < 101; ++x) {
9+
if (cnt[x] == 1) {
10+
ans += x;
1111
}
1212
}
1313
return ans;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
class Solution:
22
def sumOfUnique(self, nums: List[int]) -> int:
3-
counter = Counter(nums)
4-
return sum(num for num, cnt in counter.items() if cnt == 1)
3+
cnt = Counter(nums)
4+
return sum(x for x, v in cnt.items() if v == 1)

0 commit comments

Comments
 (0)