Skip to content

Commit d53d5de

Browse files
committed
feat: add solutions to lc problem: No.2295
No.2295.Replace Elements in an Array
1 parent 82c3e31 commit d53d5de

File tree

7 files changed

+72
-129
lines changed

7 files changed

+72
-129
lines changed

solution/2200-2299/2295.Replace Elements in an Array/README.md

+28-43
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@
6262

6363
**方法一:哈希表**
6464

65+
我们先用哈希表 $d$ 记录数组 `nums` 中每个数字的下标,然后遍历操作数组 `operations`,对于每个操作 $[a, b]$,我们将 $a$ 在 `nums` 中的下标 $d[a]$ 对应的数字替换为 $b$,并更新 $d$ 中 $b$ 的下标为 $d[a]$。
66+
67+
最后返回 `nums` 即可。
68+
69+
时间复杂度 $O(n + m)$,空间复杂度 $O(n)$。其中 $n$ 和 $m$ 分别是数组 `nums``operations` 的长度。
70+
6571
<!-- tabs:start -->
6672

6773
### **Python3**
@@ -73,13 +79,9 @@ class Solution:
7379
def arrayChange(self, nums: List[int], operations: List[List[int]]) -> List[int]:
7480
d = {v: i for i, v in enumerate(nums)}
7581
for a, b in operations:
76-
idx = d[a]
77-
d.pop(a)
78-
d[b] = idx
79-
ans = [0] * len(nums)
80-
for v, i in d.items():
81-
ans[i] = v
82-
return ans
82+
nums[d[a]] = b
83+
d[b] = d[a]
84+
return nums
8385
```
8486

8587
### **Java**
@@ -89,20 +91,16 @@ class Solution:
8991
```java
9092
class Solution {
9193
public int[] arrayChange(int[] nums, int[][] operations) {
92-
int n = nums.length;
9394
Map<Integer, Integer> d = new HashMap<>();
94-
for (int i = 0; i < n; ++i) {
95+
for (int i = 0; i < nums.length; ++i) {
9596
d.put(nums[i], i);
9697
}
97-
for (int[] op : operations) {
98+
for (var op : operations) {
9899
int a = op[0], b = op[1];
99-
int idx = d.get(a);
100-
d.remove(a);
101-
d.put(b, idx);
100+
nums[d.get(a)] = b;
101+
d.put(b, d.get(a));
102102
}
103-
int[] ans = new int[n];
104-
d.forEach((v, i) -> { ans[i] = v; });
105-
return ans;
103+
return nums;
106104
}
107105
}
108106
```
@@ -113,18 +111,16 @@ class Solution {
113111
class Solution {
114112
public:
115113
vector<int> arrayChange(vector<int>& nums, vector<vector<int>>& operations) {
116-
int n = nums.size();
117114
unordered_map<int, int> d;
118-
for (int i = 0; i < n; ++i) d[nums[i]] = i;
115+
for (int i = 0; i < nums.size(); ++i) {
116+
d[nums[i]] = i;
117+
}
119118
for (auto& op : operations) {
120119
int a = op[0], b = op[1];
121-
int idx = d[a];
122-
d.erase(a);
123-
d[b] = idx;
120+
nums[d[a]] = b;
121+
d[b] = d[a];
124122
}
125-
vector<int> ans(n);
126-
for (auto& [v, i] : d) ans[i] = v;
127-
return ans;
123+
return nums;
128124
}
129125
};
130126
```
@@ -139,34 +135,23 @@ func arrayChange(nums []int, operations [][]int) []int {
139135
}
140136
for _, op := range operations {
141137
a, b := op[0], op[1]
142-
idx := d[a]
143-
delete(d, a)
144-
d[b] = idx
145-
}
146-
ans := make([]int, len(nums))
147-
for v, i := range d {
148-
ans[i] = v
138+
nums[d[a]] = b
139+
d[b] = d[a]
149140
}
150-
return ans
141+
return nums
151142
}
152143
```
153144

154145
### **TypeScript**
155146

156147
```ts
157148
function arrayChange(nums: number[], operations: number[][]): number[] {
158-
const n = nums.length;
159-
let hashMap = new Map(nums.map((v, i) => [v, i]));
160-
for (let [oldVal, newVal] of operations) {
161-
let idx = hashMap.get(oldVal);
162-
hashMap.delete(oldVal);
163-
hashMap.set(newVal, idx);
164-
}
165-
let ans = new Array(n);
166-
for (let [val, key] of hashMap.entries()) {
167-
ans[key] = val;
149+
const d = new Map(nums.map((v, i) => [v, i]));
150+
for (const [a, b] of operations) {
151+
nums[d.get(a)] = b;
152+
d.set(b, d.get(a));
168153
}
169-
return ans;
154+
return nums;
170155
}
171156
```
172157

solution/2200-2299/2295.Replace Elements in an Array/README_EN.md

+22-43
Original file line numberDiff line numberDiff line change
@@ -65,34 +65,26 @@ class Solution:
6565
def arrayChange(self, nums: List[int], operations: List[List[int]]) -> List[int]:
6666
d = {v: i for i, v in enumerate(nums)}
6767
for a, b in operations:
68-
idx = d[a]
69-
d.pop(a)
70-
d[b] = idx
71-
ans = [0] * len(nums)
72-
for v, i in d.items():
73-
ans[i] = v
74-
return ans
68+
nums[d[a]] = b
69+
d[b] = d[a]
70+
return nums
7571
```
7672

7773
### **Java**
7874

7975
```java
8076
class Solution {
8177
public int[] arrayChange(int[] nums, int[][] operations) {
82-
int n = nums.length;
8378
Map<Integer, Integer> d = new HashMap<>();
84-
for (int i = 0; i < n; ++i) {
79+
for (int i = 0; i < nums.length; ++i) {
8580
d.put(nums[i], i);
8681
}
87-
for (int[] op : operations) {
82+
for (var op : operations) {
8883
int a = op[0], b = op[1];
89-
int idx = d.get(a);
90-
d.remove(a);
91-
d.put(b, idx);
84+
nums[d.get(a)] = b;
85+
d.put(b, d.get(a));
9286
}
93-
int[] ans = new int[n];
94-
d.forEach((v, i) -> { ans[i] = v; });
95-
return ans;
87+
return nums;
9688
}
9789
}
9890
```
@@ -103,18 +95,16 @@ class Solution {
10395
class Solution {
10496
public:
10597
vector<int> arrayChange(vector<int>& nums, vector<vector<int>>& operations) {
106-
int n = nums.size();
10798
unordered_map<int, int> d;
108-
for (int i = 0; i < n; ++i) d[nums[i]] = i;
99+
for (int i = 0; i < nums.size(); ++i) {
100+
d[nums[i]] = i;
101+
}
109102
for (auto& op : operations) {
110103
int a = op[0], b = op[1];
111-
int idx = d[a];
112-
d.erase(a);
113-
d[b] = idx;
104+
nums[d[a]] = b;
105+
d[b] = d[a];
114106
}
115-
vector<int> ans(n);
116-
for (auto& [v, i] : d) ans[i] = v;
117-
return ans;
107+
return nums;
118108
}
119109
};
120110
```
@@ -129,34 +119,23 @@ func arrayChange(nums []int, operations [][]int) []int {
129119
}
130120
for _, op := range operations {
131121
a, b := op[0], op[1]
132-
idx := d[a]
133-
delete(d, a)
134-
d[b] = idx
135-
}
136-
ans := make([]int, len(nums))
137-
for v, i := range d {
138-
ans[i] = v
122+
nums[d[a]] = b
123+
d[b] = d[a]
139124
}
140-
return ans
125+
return nums
141126
}
142127
```
143128

144129
### **TypeScript**
145130

146131
```ts
147132
function arrayChange(nums: number[], operations: number[][]): number[] {
148-
const n = nums.length;
149-
let hashMap = new Map(nums.map((v, i) => [v, i]));
150-
for (let [oldVal, newVal] of operations) {
151-
let idx = hashMap.get(oldVal);
152-
hashMap.delete(oldVal);
153-
hashMap.set(newVal, idx);
154-
}
155-
let ans = new Array(n);
156-
for (let [val, key] of hashMap.entries()) {
157-
ans[key] = val;
133+
const d = new Map(nums.map((v, i) => [v, i]));
134+
for (const [a, b] of operations) {
135+
nums[d.get(a)] = b;
136+
d.set(b, d.get(a));
158137
}
159-
return ans;
138+
return nums;
160139
}
161140
```
162141

Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
class Solution {
22
public:
33
vector<int> arrayChange(vector<int>& nums, vector<vector<int>>& operations) {
4-
int n = nums.size();
54
unordered_map<int, int> d;
6-
for (int i = 0; i < n; ++i) d[nums[i]] = i;
5+
for (int i = 0; i < nums.size(); ++i) {
6+
d[nums[i]] = i;
7+
}
78
for (auto& op : operations) {
89
int a = op[0], b = op[1];
9-
int idx = d[a];
10-
d.erase(a);
11-
d[b] = idx;
10+
nums[d[a]] = b;
11+
d[b] = d[a];
1212
}
13-
vector<int> ans(n);
14-
for (auto& [v, i] : d) ans[i] = v;
15-
return ans;
13+
return nums;
1614
}
1715
};

solution/2200-2299/2295.Replace Elements in an Array/Solution.go

+3-8
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,8 @@ func arrayChange(nums []int, operations [][]int) []int {
55
}
66
for _, op := range operations {
77
a, b := op[0], op[1]
8-
idx := d[a]
9-
delete(d, a)
10-
d[b] = idx
8+
nums[d[a]] = b
9+
d[b] = d[a]
1110
}
12-
ans := make([]int, len(nums))
13-
for v, i := range d {
14-
ans[i] = v
15-
}
16-
return ans
11+
return nums
1712
}
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
class Solution {
22
public int[] arrayChange(int[] nums, int[][] operations) {
3-
int n = nums.length;
43
Map<Integer, Integer> d = new HashMap<>();
5-
for (int i = 0; i < n; ++i) {
4+
for (int i = 0; i < nums.length; ++i) {
65
d.put(nums[i], i);
76
}
8-
for (int[] op : operations) {
7+
for (var op : operations) {
98
int a = op[0], b = op[1];
10-
int idx = d.get(a);
11-
d.remove(a);
12-
d.put(b, idx);
9+
nums[d.get(a)] = b;
10+
d.put(b, d.get(a));
1311
}
14-
int[] ans = new int[n];
15-
d.forEach((v, i) -> { ans[i] = v; });
16-
return ans;
12+
return nums;
1713
}
1814
}

solution/2200-2299/2295.Replace Elements in an Array/Solution.py

+3-7
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@ class Solution:
22
def arrayChange(self, nums: List[int], operations: List[List[int]]) -> List[int]:
33
d = {v: i for i, v in enumerate(nums)}
44
for a, b in operations:
5-
idx = d[a]
6-
d.pop(a)
7-
d[b] = idx
8-
ans = [0] * len(nums)
9-
for v, i in d.items():
10-
ans[i] = v
11-
return ans
5+
nums[d[a]] = b
6+
d[b] = d[a]
7+
return nums
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
function arrayChange(nums: number[], operations: number[][]): number[] {
2-
const n = nums.length;
3-
let hashMap = new Map(nums.map((v, i) => [v, i]));
4-
for (let [oldVal, newVal] of operations) {
5-
let idx = hashMap.get(oldVal);
6-
hashMap.delete(oldVal);
7-
hashMap.set(newVal, idx);
2+
const d = new Map(nums.map((v, i) => [v, i]));
3+
for (const [a, b] of operations) {
4+
nums[d.get(a)] = b;
5+
d.set(b, d.get(a));
86
}
9-
let ans = new Array(n);
10-
for (let [val, key] of hashMap.entries()) {
11-
ans[key] = val;
12-
}
13-
return ans;
7+
return nums;
148
}

0 commit comments

Comments
 (0)