File tree Expand file tree Collapse file tree 3 files changed +51
-21
lines changed Expand file tree Collapse file tree 3 files changed +51
-21
lines changed Original file line number Diff line number Diff line change @@ -166,20 +166,19 @@ JavaScript:
166166 * @return {number[]}
167167 */
168168var nextGreaterElements = function (nums ) {
169- // let map = new Map() ;
169+ const len = nums . length ;
170170 let stack = [];
171- let res = new Array (nums . length ).fill (- 1 );
172- for (let i = 0 ; i < nums . length * 2 ; i++ ) {
171+ let res = Array (len ).fill (- 1 );
172+ for (let i = 0 ; i < len * 2 ; i++ ) {
173173 while (
174174 stack .length &&
175- nums[i % nums . length ] > nums[stack[stack .length - 1 ]]
175+ nums[i % len ] > nums[stack[stack .length - 1 ]]
176176 ) {
177- let index = stack .pop ();
178- res[index] = nums[i % nums . length ];
177+ const index = stack .pop ();
178+ res[index] = nums[i % len ];
179179 }
180- stack .push (i % nums . length );
180+ stack .push (i % len );
181181 }
182-
183182 return res;
184183};
185184```
Original file line number Diff line number Diff line change @@ -301,32 +301,46 @@ func dailyTemperatures(num []int) []int {
301301
302302JavaScript:
303303``` javascript
304- /**
305- * @param {number[]} temperatures
306- * @return {number[]}
307- */
304+ // 版本一
308305var dailyTemperatures = function (temperatures ) {
309- let n = temperatures .length ;
310- let res = new Array (n).fill (0 );
311- let stack = []; // 递减栈 :用于存储元素右面第一个比他大的元素下标
306+ const n = temperatures .length ;
307+ const res = Array (n).fill (0 );
308+ const stack = []; // 递增栈 :用于存储元素右面第一个比他大的元素下标
312309 stack .push (0 );
313310 for (let i = 1 ; i < n; i++ ) {
314311 // 栈顶元素
315- let top = stack[stack .length - 1 ];
312+ const top = stack[stack .length - 1 ];
316313 if (temperatures[i] < temperatures[top]) {
317314 stack .push (i);
318315 } else if (temperatures[i] === temperatures[top]) {
319316 stack .push (i);
320317 } else {
321318 while (stack .length && temperatures[i] > temperatures[stack[stack .length - 1 ]]) {
322- let top = stack .pop ();
319+ const top = stack .pop ();
323320 res[top] = i - top;
324321 }
325322 stack .push (i);
326323 }
327324 }
328325 return res;
329326};
327+
328+
329+ // 版本二
330+ var dailyTemperatures = function (temperatures ) {
331+ const n = temperatures .length ;
332+ const res = Array (n).fill (0 );
333+ const stack = []; // 递增栈:用于存储元素右面第一个比他大的元素下标
334+ stack .push (0 );
335+ for (let i = 1 ; i < n; i++ ) {
336+ while (stack .length && temperatures[i] > temperatures[stack[stack .length - 1 ]]) {
337+ const top = stack .pop ();
338+ res[top] = i - top;
339+ }
340+ stack .push (i);
341+ }
342+ return res;
343+ };
330344```
331345
332346
Original file line number Diff line number Diff line change @@ -250,11 +250,9 @@ func removeDuplicates(s string) string {
250250
251251javaScript:
252252
253+ 法一:使用栈
254+
253255``` js
254- /**
255- * @param {string} s
256- * @return {string}
257- */
258256var removeDuplicates = function (s ) {
259257 const stack = [];
260258 for (const x of s) {
@@ -267,6 +265,25 @@ var removeDuplicates = function(s) {
267265};
268266```
269267
268+ 法二:双指针(模拟栈)
269+
270+ ``` js
271+ // 原地解法(双指针模拟栈)
272+ var removeDuplicates = function (s ) {
273+ s = [... s];
274+ let top = - 1 ; // 指向栈顶元素的下标
275+ for (let i = 0 ; i < s .length ; i++ ) {
276+ if (top === - 1 || s[top] !== s[i]) { // top === -1 即空栈
277+ s[++ top] = s[i]; // 入栈
278+ } else {
279+ top-- ; // 推出栈
280+ }
281+ }
282+ s .length = top + 1 ; // 栈顶元素下标 + 1 为栈的长度
283+ return s .join (' ' );
284+ };
285+ ```
286+
270287TypeScript:
271288
272289``` typescript
You can’t perform that action at this time.
0 commit comments