62
62
63
63
** 方法一:哈希表**
64
64
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
+
65
71
<!-- tabs:start -->
66
72
67
73
### ** Python3**
@@ -73,13 +79,9 @@ class Solution:
73
79
def arrayChange (self , nums : List[int ], operations : List[List[int ]]) -> List[int ]:
74
80
d = {v: i for i, v in enumerate (nums)}
75
81
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
83
85
```
84
86
85
87
### ** Java**
@@ -89,20 +91,16 @@ class Solution:
89
91
``` java
90
92
class Solution {
91
93
public int [] arrayChange (int [] nums , int [][] operations ) {
92
- int n = nums. length;
93
94
Map<Integer , Integer > d = new HashMap<> ();
94
- for (int i = 0 ; i < n ; ++ i) {
95
+ for (int i = 0 ; i < nums . length ; ++ i) {
95
96
d. put(nums[i], i);
96
97
}
97
- for (int [] op : operations) {
98
+ for (var op : operations) {
98
99
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));
102
102
}
103
- int [] ans = new int [n];
104
- d. forEach((v, i) - > { ans[i] = v; });
105
- return ans;
103
+ return nums;
106
104
}
107
105
}
108
106
```
@@ -113,18 +111,16 @@ class Solution {
113
111
class Solution {
114
112
public:
115
113
vector<int > arrayChange(vector<int >& nums, vector<vector<int >>& operations) {
116
- int n = nums.size();
117
114
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
+ }
119
118
for (auto& op : operations) {
120
119
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] ;
124
122
}
125
- vector<int > ans(n);
126
- for (auto& [ v, i] : d) ans[ i] = v;
127
- return ans;
123
+ return nums;
128
124
}
129
125
};
130
126
```
@@ -139,34 +135,23 @@ func arrayChange(nums []int, operations [][]int) []int {
139
135
}
140
136
for _, op := range operations {
141
137
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]
149
140
}
150
- return ans
141
+ return nums
151
142
}
152
143
```
153
144
154
145
### ** TypeScript**
155
146
156
147
``` ts
157
148
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 ));
168
153
}
169
- return ans ;
154
+ return nums ;
170
155
}
171
156
```
172
157
0 commit comments