Skip to content

Commit 8ec9f98

Browse files
committed
Merge branch 'master' of https://github.com/L-SUI/note
2 parents 6936390 + ae58eca commit 8ec9f98

File tree

56 files changed

+3359
-12
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+3359
-12
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// 给你一个整数数组 arr,只有可以将其划分为三个和相等的 非空 部分时才返回 true,否则返回 false。
2+
3+
// 形式上,如果可以找出索引 i + 1 < j 且满足 (arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1]) 就可以将数组三等分。
4+
5+
//  
6+
7+
// 示例 1:
8+
9+
// 输入:arr = [0,2,1,-6,6,-7,9,1,2,0,1]
10+
// 输出:true
11+
// 解释:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
12+
// 示例 2:
13+
14+
// 输入:arr = [0,2,1,-6,6,7,9,-1,2,0,1]
15+
// 输出:false
16+
// 示例 3:
17+
18+
// 输入:arr = [3,3,6,5,-2,2,5,1,-9,4]
19+
// 输出:true
20+
// 解释:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
21+
//  
22+
23+
// 提示:
24+
25+
// 3 <= arr.length <= 5 * 104
26+
// -104 <= arr[i] <= 104
27+
28+
29+
// 来源:力扣(LeetCode)
30+
// 链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum
31+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
32+
33+
34+
35+
/**
36+
* @param {number[]} arr
37+
* @return {boolean}
38+
*/
39+
/**
40+
* @param {number[]} arr
41+
* @return {boolean}
42+
*/
43+
var canThreePartsEqualSum = function(arr) {
44+
let sum = arr.reduce((a,b) => a + b)
45+
let num = 3
46+
let temp = 0
47+
for(let a of arr){
48+
temp += a
49+
if (temp === sum / 3) num--, temp = 0
50+
}
51+
return num <= 0
52+
};
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// 有效括号字符串为空 ""、"(" + A + ")" 或 A + B ,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。
2+
3+
// 例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。
4+
// 如果有效字符串 s 非空,且不存在将其拆分为 s = A + B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。
5+
6+
// 给出一个非空有效字符串 s,考虑将其进行原语化分解,使得:s = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。
7+
8+
// 对 s 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 s 。
9+
10+
//  
11+
12+
// 示例 1:
13+
14+
// 输入:s = "(()())(())"
15+
// 输出:"()()()"
16+
// 解释:
17+
// 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
18+
// 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
19+
// 示例 2:
20+
21+
// 输入:s = "(()())(())(()(()))"
22+
// 输出:"()()()()(())"
23+
// 解释:
24+
// 输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
25+
// 删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
26+
// 示例 3:
27+
28+
// 输入:s = "()()"
29+
// 输出:""
30+
// 解释:
31+
// 输入字符串为 "()()",原语化分解得到 "()" + "()",
32+
// 删除每个部分中的最外层括号后得到 "" + "" = ""。
33+
//  
34+
35+
// 提示:
36+
37+
// 1 <= s.length <= 105
38+
// s[i] 为 '(' 或 ')'
39+
// s 是一个有效括号字符串
40+
// 通过次数57,377提交次数73,236
41+
42+
// 来源:力扣(LeetCode)
43+
// 链接:https://leetcode-cn.com/problems/remove-outermost-parentheses
44+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
45+
46+
47+
48+
49+
50+
/**
51+
* @param {string} s
52+
* @return {string}
53+
*/
54+
var removeOuterParentheses = function(S) {
55+
let count = 0, ans = '';
56+
for (let i = 0; i < S.length; i++) {
57+
if(S[i] === '(' && count++ > 0) ans += '('
58+
if(S[i] === ')' && count-- > 1) ans += ')';
59+
}
60+
return ans;
61+
};
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。
2+
3+
// 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。
4+
5+
// 返回这些数字之和。题目数据保证答案是一个 32 位 整数。
6+
7+
//  
8+
9+
// 示例 1:
10+
11+
12+
// 输入:root = [1,0,1,0,1,0,1]
13+
// 输出:22
14+
// 解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
15+
// 示例 2:
16+
17+
// 输入:root = [0]
18+
// 输出:0
19+
// 示例 3:
20+
21+
// 输入:root = [1]
22+
// 输出:1
23+
// 示例 4:
24+
25+
// 输入:root = [1,1]
26+
// 输出:3
27+
//  
28+
29+
// 提示:
30+
31+
// 树中的结点数介于 1 和 1000 之间。
32+
// Node.val 为 0 或 1 。
33+
34+
35+
// 来源:力扣(LeetCode)
36+
// 链接:https://leetcode-cn.com/problems/sum-of-root-to-leaf-binary-numbers
37+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
38+
39+
40+
41+
42+
/**
43+
* Definition for a binary tree node.
44+
* function TreeNode(val, left, right) {
45+
* this.val = (val===undefined ? 0 : val)
46+
* this.left = (left===undefined ? null : left)
47+
* this.right = (right===undefined ? null : right)
48+
* }
49+
*/
50+
/**
51+
* @param {TreeNode} root
52+
* @return {number}
53+
*/
54+
var sumRootToLeaf = function (root) {
55+
const arr = []
56+
const loop = (node, v) => {
57+
if (!node.left && !node.right) {
58+
arr.push(parseInt(v + node.val, 2))
59+
return
60+
}
61+
62+
node.left && loop(node.left, v + node.val)
63+
node.right && loop(node.right, v + node.val)
64+
}
65+
66+
loop(root, '')
67+
return arr.reduce((sum, cur) => sum + cur, 0)
68+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// 回旋镖定义为一组三个点,这些点各不相同且不在一条直线上。
2+
3+
// 给出平面上三个点组成的列表,判断这些点是否可以构成回旋镖。
4+
5+
//  
6+
7+
// 示例 1:
8+
9+
// 输入:[[1,1],[2,3],[3,2]]
10+
// 输出:true
11+
// 示例 2:
12+
13+
// 输入:[[1,1],[2,2],[3,3]]
14+
// 输出:false
15+
//  
16+
17+
// 提示:
18+
19+
// points.length == 3
20+
// points[i].length == 2
21+
// 0 <= points[i][j] <= 100
22+
23+
// 来源:力扣(LeetCode)
24+
// 链接:https://leetcode-cn.com/problems/valid-boomerang
25+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
26+
27+
28+
29+
30+
/**
31+
* @param {number[][]} points
32+
* @return {boolean}
33+
*/
34+
var isBoomerang = function(points) {
35+
const dx = points[1][0] - points[0][0];
36+
const dy = points[1][1] - points[0][1];
37+
const ex = points[2][0] - points[0][0];
38+
const ey = points[2][1] - points[0][1];
39+
return dx * ey != dy * ex;
40+
};
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// 对于字符串 S 和 T,只有在 S = T + ... + T(T 自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
2+
3+
// 返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
4+
5+
//  
6+
7+
// 示例 1:
8+
9+
// 输入:str1 = "ABCABC", str2 = "ABC"
10+
// 输出:"ABC"
11+
// 示例 2:
12+
13+
// 输入:str1 = "ABABAB", str2 = "ABAB"
14+
// 输出:"AB"
15+
// 示例 3:
16+
17+
// 输入:str1 = "LEET", str2 = "CODE"
18+
// 输出:""
19+
20+
// 来源:力扣(LeetCode)
21+
// 链接:https://leetcode-cn.com/problems/greatest-common-divisor-of-strings
22+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
23+
24+
25+
26+
/**
27+
* @param {string} str1
28+
* @param {string} str2
29+
* @return {string}
30+
*/
31+
var gcdOfStrings = function(str1, str2) {
32+
if (str1 + str2 !== str2 + str1) return ''
33+
const gcd = (a, b) => (0 === b ? a : gcd(b, a % b))
34+
return str1.substring(0, gcd(str1.length, str2.length))
35+
};
36+

LeetCode/1078. Bigram 分词.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// 给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。
2+
3+
// 对于每种这样的情况,将第三个词 "third" 添加到答案中,并返回答案。
4+
5+
//  
6+
7+
// 示例 1:
8+
9+
// 输入:text = "alice is a good girl she is a good student", first = "a", second = "good"
10+
// 输出:["girl","student"]
11+
// 示例 2:
12+
13+
// 输入:text = "we will we will rock you", first = "we", second = "will"
14+
// 输出:["we","rock"]
15+
//  
16+
17+
// 提示:
18+
19+
// 1 <= text.length <= 1000
20+
// text 由一些用空格分隔的单词组成,每个单词都由小写英文字母组成
21+
// 1 <= first.length, second.length <= 10
22+
// first 和 second 由小写英文字母组成
23+
24+
25+
// 来源:力扣(LeetCode)
26+
// 链接:https://leetcode-cn.com/problems/occurrences-after-bigram
27+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
28+
29+
30+
31+
32+
/**
33+
* @param {string} text
34+
* @param {string} first
35+
* @param {string} second
36+
* @return {string[]}
37+
*/
38+
/**
39+
* @param {string} text
40+
* @param {string} first
41+
* @param {string} second
42+
* @return {string[]}
43+
*/
44+
var findOcurrences = function (text, first, second) {
45+
let ans = [];
46+
let arr = text.split(' ');
47+
for (let i = 0; i < arr.length; i++) {
48+
if (arr[i] === first && arr[i + 1] && arr[i + 1] === second && arr[i + 2]) {
49+
ans.push(arr[i + 2])
50+
}
51+
}
52+
return ans
53+
};
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// 给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。
2+
3+
// 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。
4+
5+
//  
6+
7+
// 示例 1:
8+
9+
// 输入:address = "1.1.1.1"
10+
// 输出:"1[.]1[.]1[.]1"
11+
// 示例 2:
12+
13+
// 输入:address = "255.100.50.0"
14+
// 输出:"255[.]100[.]50[.]0"
15+
//  
16+
17+
// 提示:
18+
19+
// 给出的 address 是一个有效的 IPv4 地址
20+
21+
// 来源:力扣(LeetCode)
22+
// 链接:https://leetcode-cn.com/problems/defanging-an-ip-address
23+
// 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
24+
25+
26+
/**
27+
* @param {string} address
28+
* @return {string}
29+
*/
30+
var defangIPaddr = function(address) {
31+
return address.split('.').join('[.]')
32+
};

0 commit comments

Comments
 (0)