Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8d2c896

Browse files
✨ next premutation
1 parent 8b38f40 commit 8d2c896

File tree

4 files changed

+86
-38
lines changed

4 files changed

+86
-38
lines changed

‎src/2-add-two-numbers/index.js

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
1-
// HELP:
2-
import { ListNode } from '../_utils';
3-
4-
export const addTwoNumbers = (l1, l2) => {
5-
const dummyHead = new ListNode(0);
6-
let curr = dummyHead;
1+
/**
2+
* Definition for singly-linked list.
3+
* function ListNode(val) {
4+
* this.val = val;
5+
* this.next = null;
6+
* }
7+
*/
8+
/**
9+
* @param {ListNode} l1
10+
* @param {ListNode} l2
11+
* @return {ListNode}
12+
*/
13+
var addTwoNumbers = function (l1, l2) {
14+
const node = new ListNode();
15+
let cur = node;
716
let carry = 0;
817

918
while (l1 || l2) {
10-
let x = l1 ? l1.val : 0;
11-
let y = l2 ? l2.val : 0;
12-
let sum = carry + x + y;
13-
if (l1) l1 = l1.next;
14-
if (l2) l2 = l2.next;
19+
const sum = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + carry;
20+
carry = sum >= 10 ? 1 : 0;
21+
cur.next = new ListNode(sum % 10);
22+
cur = cur.next;
1523

16-
carry = ~~(sum / 10);
17-
curr.next = new ListNode(sum % 10);
18-
curr = curr.next;
24+
l1 && (l1 = l1.next);
25+
l2 && (l2 = l2.next);
1926
}
2027

21-
if(carry >0)curr.next = new ListNode(carry);
28+
carry &&(cur.next = new ListNode(carry));
2229

23-
return dummyHead.next;
30+
return node.next;
2431
};
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
// TODO:
2-
export function lengthOfLongestSubstring(str) {
3-
const strLength = str.length;
4-
let maxLength = 0;
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
var lengthOfLongestSubstring = function (s) {
6+
const len = s.length;
57
const map = new Map();
6-
let i = 0;
7-
for (let j = 0; j < strLength; j++) {
8-
if (map.has(str.charAt(j))) {
9-
i = Math.max(map.get(str.charAt(j)), i);
8+
let start = 0;
9+
let res = 0;
10+
11+
for (let end = 0; end < len; end++) {
12+
if (map.has(s[end])) {
13+
start = Math.max(map.get(s[end]), start);
1014
}
11-
maxLength = Math.max(maxLength,j - i + 1);
12-
map.set(str.charAt(j),j + 1);
15+
res = Math.max(res,end - start + 1);
16+
map.set(s[end],end + 1);
1317
}
1418

15-
return maxLength;
16-
}
19+
return res;
20+
};

‎src/31-next-premutation/index.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const assert = require('assert').strict;
2+
3+
function nextPermutation(nums) {
4+
let i = nums.length - 2; // 向左遍历,i从倒数第二开始是为了nums[i+1]要存在
5+
6+
// 寻找第一个小于右邻居的数
7+
while (i >= 0 && nums[i] >= nums[i + 1]) {
8+
i--;
9+
}
10+
11+
// 这个数在数组中存在,从它身后挑一个数,和它换
12+
if (i >= 0) {
13+
let j = nums.length - 1; // 从最后一项,向左遍历
14+
15+
// 寻找第一个大于 nums[i] 的数
16+
while (j >= 0 && nums[j] <= nums[i]) {
17+
j--;
18+
}
19+
20+
[nums[i], nums[j]] = [nums[j], nums[i]]; // 两数交换,实现变大
21+
}
22+
23+
// 如果 i = -1,说明是递减排列,如 3 2 1,没有下一排列,直接翻转为最小排列:1 2 3
24+
let l = i + 1;
25+
let r = nums.length - 1;
26+
while (l < r) {
27+
// i 右边的数进行翻转,使得变大的幅度小一些
28+
[nums[l], nums[r]] = [nums[r], nums[l]];
29+
l++;
30+
r--;
31+
}
32+
33+
return nums;
34+
}
35+
36+
assert.deepEqual(nextPermutation([1, 2, 3]), [1, 3, 2]);
37+
assert.deepEqual(nextPermutation([3, 2, 1]), [1, 2, 3]);
38+
assert.deepEqual(nextPermutation([1, 1, 5]), [1, 5, 1]);

‎src/5-longest-palindromic-substring/index.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@
33
* @return {string}
44
*/
55

6-
// 字节跳动
7-
// HELP:
8-
9-
var longestPalindrome = function(s) {
6+
var longestPalindrome = function (s) {
107
let n = s.length;
11-
let res = "";
12-
let dp = Array.from(new Array(n), () => new Array(n).fill(0));
8+
let dp = Array.from({ length: n }, () => Array(n).fill(false));
9+
let start = 0;
10+
let end = 0;
1311

1412
for (let i = n - 1; i >= 0; i--) {
1513
for (let j = i; j < n; j++) {
16-
dp[i][j] = s[i] == s[j] && (j - i < 2 || dp[i + 1][j - 1]);
17-
if (dp[i][j] && j - i + 1 > res.length) {
18-
res = s.slice(i, j + 1);
14+
dp[i][j] = s[i] === s[j] && (j - i < 2 || dp[i + 1][j - 1]);
15+
if (dp[i][j] && j - i > end - start) {
16+
start = i;
17+
end = j;
1918
}
2019
}
2120
}
2221

23-
return res;
22+
return s.slice(start,end+1);
2423
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /