Skip to content

Commit 72a7786

Browse files
authored
Merge pull request chefyuan#32 from coderhare/main
数组篇增加部分C++代码
2 parents 2c4afff + 2d926ff commit 72a7786

File tree

5 files changed

+208
-3
lines changed

5 files changed

+208
-3
lines changed

animation-simulation/数组篇/leetcode219数组中重复元素2.md

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,22 @@ class Solution:
7878
return False
7979
```
8080

81+
C++ Code:
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
bool containsNearbyDuplicate(vector<int>& nums, int k) {
87+
unordered_map <int, int> m;
88+
for(int i = 0; i < nums.size(); ++i){
89+
if(m.count(nums[i]) && i - m[nums[i]] <= k) return true;
90+
m[nums[i]] = i;
91+
}
92+
return false;
93+
}
94+
};
95+
```
96+
8197
**HashSet**
8298
8399
**解析**
@@ -139,4 +155,22 @@ class Solution:
139155
if len(s) > k:
140156
s.remove(nums[i - k])
141157
return False
142-
```
158+
```
159+
160+
C++ Code:
161+
162+
```cpp
163+
class Solution {
164+
public:
165+
bool containsNearbyDuplicate(vector<int>& nums, int k) {
166+
multiset <int> S;
167+
for(int i = 0; i < nums.size(); ++i){
168+
if(S.count(nums[i])) return true;
169+
S.insert(nums[i]);
170+
if(S.size() > k) S.erase(nums[i - k]);
171+
}
172+
return false;
173+
}
174+
};
175+
```
176+

animation-simulation/数组篇/leetcode54螺旋矩阵.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,42 @@ class Solution {
8585

8686
```
8787

88+
C++ Code:
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
vector<int> spiralOrder(vector<vector<int>>& matrix) {
94+
vector <int> arr;
95+
int left = 0, right = matrix[0].size()-1;
96+
int top = 0, down = matrix.size()-1;
97+
while (true) {
98+
for (int i = left; i <= right; ++i) {
99+
arr.emplace_back(matrix[top][i]);
100+
}
101+
top++;
102+
if (top > down) break;
103+
for (int i = top; i <= down; ++i) {
104+
arr.emplace_back(matrix[i][right]);
105+
}
106+
right--;
107+
if (left > right) break;
108+
for (int i = right; i >= left; --i) {
109+
arr.emplace_back(matrix[down][i]);
110+
}
111+
down--;
112+
if (top > down) break;
113+
for (int i = down; i >= top; --i) {
114+
arr.emplace_back(matrix[i][left]);
115+
}
116+
left++;
117+
if (left > right) break;
118+
}
119+
return arr;
120+
}
121+
};
122+
```
123+
88124
Python3 Code:
89125
90126
```python

animation-simulation/数组篇/leetcode59螺旋矩阵2.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,42 @@ class Solution:
140140
return arr
141141
```
142142

143+
C++ Code:
144+
145+
```cpp
146+
class Solution {
147+
public:
148+
vector<int> spiralOrder(vector<vector<int>>& matrix) {
149+
vector <int> arr;
150+
int left = 0, right = matrix[0].size()-1;
151+
int top = 0, down = matrix.size()-1;
152+
while (true) {
153+
for (int i = left; i <= right; ++i) {
154+
arr.emplace_back(matrix[top][i]);
155+
}
156+
top++;
157+
if (top > down) break;
158+
for (int i = top; i <= down; ++i) {
159+
arr.emplace_back(matrix[i][right]);
160+
}
161+
right--;
162+
if (left > right) break;
163+
for (int i = right; i >= left; --i) {
164+
arr.emplace_back(matrix[down][i]);
165+
}
166+
down--;
167+
if (top > down) break;
168+
for (int i = down; i >= top; --i) {
169+
arr.emplace_back(matrix[i][left]);
170+
}
171+
left++;
172+
if (left > right) break;
173+
}
174+
return arr;
175+
}
176+
};
177+
```
178+
143179
我们仅仅是将 54 反过来了,往螺旋矩阵里面插值,下面我们直接看代码吧,大家可以也可以对其改进,大家可以思考一下,如果修改能够让代码更简洁!
144180
145181
Java Code:
@@ -226,3 +262,39 @@ class Solution:
226262
return arr.tolist()
227263
```
228264

265+
C++ Code:
266+
267+
```cpp
268+
class Solution {
269+
public:
270+
vector<vector<int>> generateMatrix(int n) {
271+
vector <vector <int>> arr(n, vector <int>(n));
272+
int left = 0, right = n-1, top = 0, buttom = n - 1, num = 1, numsize = n * n;
273+
while (true) {
274+
for (int i = left; i <= right; ++i) {
275+
arr[top][i] = num++;
276+
}
277+
top++;
278+
if (num > numsize) break;
279+
for (int i = top; i <= buttom; ++i) {
280+
arr[i][right] = num++;
281+
}
282+
right--;
283+
if (num > numsize) break;
284+
for (int i = right; i >= left; --i) {
285+
arr[buttom][i] = num++;
286+
}
287+
buttom--;
288+
if (num > numsize) break;
289+
for (int i = buttom; i >= top; --i) {
290+
arr[i][left] = num++;
291+
}
292+
left++;
293+
if (num > numsize) break;
294+
295+
}
296+
return arr;
297+
}
298+
};
299+
```
300+

animation-simulation/数组篇/leetcode66加一.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
> 感谢支持,该仓库会一直维护,希望对各位有一丢丢帮助。
44
>
55
> 另外希望手机阅读的同学可以来我的 <u>[**公众号:袁厨的算法小屋**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
6-
>
76
87
#### [66. 加一](https://leetcode-cn.com/problems/plus-one/)
98

@@ -85,3 +84,22 @@ class Solution:
8584
arr[0] = 1
8685
return arr
8786
```
87+
88+
C++ Code:
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
vector<int> plusOne(vector<int>& digits) {
94+
for(int i = digits.size() - 1; i >= 0; --i){
95+
digits[i] = (digits[i] + 1)%10;
96+
if(digits[i]) return digits;
97+
}
98+
for(int & x: digits) x = 0;
99+
digits.emplace_back(1);
100+
reverse(digits.begin(), digits.end());
101+
return digits;
102+
}
103+
};
104+
```
105+

animation-simulation/数组篇/leetcode75颜色分类.md

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,27 @@ class Solution:
9696
nums[j] = temp
9797
```
9898

99+
C++ Code:
100+
101+
```cpp
102+
class Solution {
103+
public:
104+
void sortColors(vector<int>& nums) {
105+
int len = nums.size(), left = 0;
106+
int i = left, right = len-1;
107+
while (i <= right) {
108+
if (nums[i] == 2) {
109+
swap(nums[i],nums[right--]);
110+
} else if (nums[i] == 0) {
111+
swap(nums[i++],nums[left++]);
112+
} else {
113+
i++;
114+
}
115+
}
116+
}
117+
};
118+
```
119+
99120
另外我们看这段代码,有什么问题呢?那就是我们即使完全符合时,仍会交换元素,这样会大大降低我们的效率。
100121
101122
例如:[0,0,0,1,1,1,2,2,2]
@@ -174,4 +195,28 @@ class Solution:
174195
temp = nums[i]
175196
nums[i] = nums[j]
176197
nums[j] = temp
177-
```
198+
```
199+
200+
C++ Code:
201+
202+
```cpp
203+
class Solution {
204+
public:
205+
void sortColors(vector<int>& nums) {
206+
int left = 0, len = nums.size();
207+
int right = len - 1;
208+
for (int i = 0; i <= right; ++i) {
209+
if (nums[i] == 0) {
210+
swap(nums[i],nums[left++]);
211+
}
212+
if (nums[i] == 2) {
213+
swap(nums[i],nums[right--]);
214+
if (nums[i] != 1) {
215+
i--;
216+
}
217+
}
218+
}
219+
}
220+
};
221+
```
222+

0 commit comments

Comments
 (0)