Skip to content

Commit 062df9f

Browse files
committed
feat(algorithms): 50.pow(x,n)
1 parent 9138d7f commit 062df9f

File tree

17 files changed

+252
-158
lines changed

17 files changed

+252
-158
lines changed

README.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,18 @@ LeetCode problems' submissions & top randed with TypeScript.
2626

2727
## Algorithms
2828

29-
| \# | Title | Topics | Difficulty |
30-
| :--------------------------------------------------------------------- | :--------------------------------------------- | :----- | :----------------------------------------: |
31-
| [0001](algorithms/0001.two-sum) | two-sum | String | <span class='dif-tag easy'>Easy</span> |
32-
| [0003](algorithms/0003.longest-substring-without-repeating-characters) | longest-substring-without-repeating-characters | String | <span class='dif-tag easy'>Easy</span> |
33-
| [0004](algorithms/0004.median-of-two-sorted-arrays) | median-of-two-sorted-arrays | String | <span class='dif-tag hard'>Hard</span> |
34-
| [0014](algorithms/0014.longest-common-prefix) | longest-common-prefix | String | <span class='dif-tag easy'>Easy</span> |
35-
| [0017](algorithms/0017.letter-combinations-of-a-phone-number) | letter-combinations-of-a-phone-number | String | <span class='dif-tag easy'>Easy</span> |
36-
| [0050](algorithms/0050.powx-n) | powx-n | String | <span class='dif-tag easy'>Easy</span> |
37-
| [0074](algorithms/0074.search-a-2d-matrix) | search-a-2d-matrix | String | <span class='dif-tag easy'>Easy</span> |
38-
| [0136](algorithms/0136.single-number) | single-number | String | <span class='dif-tag medium'>Medium</span> |
39-
| [0169](algorithms/0169.majority-element) | majority-element | String | <span class='dif-tag easy'>Easy</span> |
40-
| [0202](algorithms/0202.happy-number) | happy-number | String | <span class='dif-tag easy'>Easy</span> |
41-
| [0240](algorithms/0240.search-a-2d-matrix-ii) | search-a-2d-matrix-ii | String | <span class='dif-tag easy'>Easy</span> |
42-
| [0344](algorithms/0344.reverse-string) | reverse-string | String | <span class='dif-tag easy'>Easy</span> |
43-
| [0724](algorithms/0724.find-pivot-index) | find-pivot-inde | String | <span class='dif-tag hard'>Hard</span> |
29+
| \# | Title | Topics | Difficulty |
30+
| :------------------------------------------------------------------------------- | :--------------------------------------------- | :----- | :----------------------------------------: |
31+
| [0001](algorithms/0001.two-sum/README.md) | two-sum | String | <span class='dif-tag easy'>Easy</span> |
32+
| [0003](algorithms/0003.longest-substring-without-repeating-characters/README.md) | longest-substring-without-repeating-characters | String | <span class='dif-tag easy'>Easy</span> |
33+
| [0004](algorithms/0004.median-of-two-sorted-arrays/README.md) | median-of-two-sorted-arrays | String | <span class='dif-tag hard'>Hard</span> |
34+
| [0014](algorithms/0014.longest-common-prefix/README.md) | longest-common-prefix | String | <span class='dif-tag easy'>Easy</span> |
35+
| [0017](algorithms/0017.letter-combinations-of-a-phone-number/README.md) | letter-combinations-of-a-phone-number | String | <span class='dif-tag easy'>Easy</span> |
36+
| [0050](algorithms/0050.powx-n) | powx-n | String | <span class='dif-tag easy'>Easy</span> |
37+
| [0074](algorithms/0074.search-a-2d-matrix/README.md) | search-a-2d-matrix | String | <span class='dif-tag easy'>Easy</span> |
38+
| [0136](algorithms/0136.single-number/README.md) | single-number | String | <span class='dif-tag medium'>Medium</span> |
39+
| [0169](algorithms/0169.majority-element/README.md) | majority-element | String | <span class='dif-tag easy'>Easy</span> |
40+
| [0202](algorithms/0202.happy-number/README.md) | happy-number | String | <span class='dif-tag easy'>Easy</span> |
41+
| [0240](algorithms/0240.search-a-2d-matrix-ii/README.md) | search-a-2d-matrix-ii | String | <span class='dif-tag easy'>Easy</span> |
42+
| [0344](algorithms/0344.reverse-string/README.md) | reverse-string | String | <span class='dif-tag easy'>Easy</span> |
43+
| [0724](algorithms/0724.find-pivot-index/README.md) | find-pivot-inde | String | <span class='dif-tag hard'>Hard</span> |

algorithms/0001.two-sum/index.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/**
2-
* 两次列表遍历
2+
* 嵌套循环遍历
33
* 这事最偷懒的办法,快速实现后,再考虑优化方案
44
* 使用Array.forEach在性能上会有点损耗(测试用例:61ms到59ms)
5-
* @time 2019.04.13
5+
* @time 2018.9.13
66
* @status Accepted
7-
* @runtime 120ms > 41.06%
7+
* @runtime 120ms | 40.065%
88
*/
99
var twoSum = (nums: number[], target: number): number[] => {
1010
for (let i: number = 0; i < nums.length; i++) {
@@ -18,18 +18,14 @@ var twoSum = (nums: number[], target: number): number[] => {
1818

1919
/**
2020
* 哈希存储
21+
* @time
2122
* @status Accepted
22-
* @runtime
23-
* @memory
23+
* @runtime 80 ms | 59.00%
2424
*/
2525
var twoSum = (nums: number[], target: number): number[] => {
2626
const map: any = {};
27-
const length = nums.length;
28-
// 使用Array.forEach在性能上会有点损耗(测试用例:61ms到59ms)
29-
for (let i = 0; i < length; i++) {
30-
map[nums[i]] = i;
31-
}
32-
for (let i = 0; i < length; i++) {
27+
nums.forEach((i, k) => (map[i] = k));
28+
for (let i = 0; i < nums.length; i++) {
3329
const x = target - nums[i];
3430
if (x in map && map[x] != i) {
3531
return [i, map[x]];
@@ -38,26 +34,30 @@ var twoSum = (nums: number[], target: number): number[] => {
3834
};
3935

4036
/**
41-
* 一次哈希遍历
37+
* 方案二:哈希存储
38+
* @time
4239
* @status Accepted
43-
* @runtime 52ms < 100%
40+
* @runtime 56ms | 100.00%
4441
*/
4542
var twoSum = (nums: number[], target: number): number[] => {
4643
const map: any = {};
47-
const length = nums.length;
44+
const length: number = nums.length;
45+
for (let i = 0; i < length; i++) {
46+
map[nums[i]] = i;
47+
}
4848
for (let i = 0; i < length; i++) {
4949
const x = target - nums[i];
5050
if (x in map && map[x] != i) {
51-
return [map[x], i];
51+
return [i, map[x]];
5252
}
53-
map[nums[i]] = i;
5453
}
5554
};
5655

5756
/**
5857
* 哈希遍历
59-
* @top
60-
* @runtime 52ms < 100%
58+
* @time
59+
* @status Accepted
60+
* @runtime 52ms | 100%
6161
*/
6262
var twoSum = (nums: number[], target: number): number[] => {
6363
const map: any = {};
Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
/**
2-
* 987test case,132ms
2+
* @time 2018.10.19
3+
* @status Output Limit Exceeded
4+
* @input `"unpvlhkldvfzvzwdfhojkyczxydauiioxzlkhvvmqamnakrfrhqefsddqifmqocpnoawlvjcyxpyhifbqxhxpkchuivky"`
35
*/
4-
var slution = (s: string): number => {
6+
var lengthOfLongestSubstring = (s: string): number => {
57
let maxSub = "",
68
currentSub = "";
7-
const arr = s.split("");
9+
10+
const arr: string[] = s.split("");
811
arr.forEach((s: string) => {
912
if (currentSub.includes(s)) {
1013
// 存在
@@ -26,17 +29,32 @@ var slution = (s: string): number => {
2629
};
2730

2831
/**
29-
* 987test case,184ms
32+
*
33+
* @time 2018.10.19
34+
* @status Accepted
35+
* @runtime 116ms | 55.08%
3036
*/
31-
var slution = (s: string): number => {
32-
const obj = {
33-
subStr: "",
34-
maxLen: 0
35-
};
36-
for (let i: number = 0; i < s.length; i++) {
37-
let strArray: string[] = obj.subStr.split(s[i]);
38-
obj.subStr = strArray[strArray.length - 1] + s[i];
39-
obj.maxLen = Math.max(obj.maxLen, obj.subStr.length);
40-
}
41-
return obj.maxLen;
37+
var lengthOfLongestSubstring = (s: string): number => {
38+
let maxSub: string = "",
39+
currentSub: string = "";
40+
41+
const arr: string[] = s.split("");
42+
arr.forEach((s: string) => {
43+
if (currentSub.includes(s)) {
44+
// 存在
45+
if (currentSub.length >= maxSub.length) {
46+
maxSub = currentSub;
47+
}
48+
let [lStr, rStr] = currentSub.split(s);
49+
currentSub = rStr || "";
50+
currentSub += s;
51+
} else {
52+
// 不存在
53+
currentSub += s;
54+
if (currentSub.length >= maxSub.length) {
55+
maxSub = currentSub;
56+
}
57+
}
58+
});
59+
return maxSub.length;
4260
};
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* 递归
3+
* @time 2019.1.4
4+
* @status Accepted
5+
* @runtime 168ms | 19.48%
6+
* @memory 15.8MB |
7+
*/
8+
var findMedianSortedArrays = (nums1: number[], nums2: number[]): number => {
9+
const findKth = (nums1: number[], nums2: number[], k: number): number => {
10+
var m: number = nums1.length;
11+
var n: number = nums2.length;
12+
if (m > n) {
13+
return findKth(nums2, nums1, k);
14+
}
15+
if (m === 0) {
16+
return nums2[k - 1];
17+
}
18+
if (k === 1) {
19+
return Math.min(nums1[0], nums2[0]);
20+
}
21+
var pa = Math.floor(k / 2) < m ? Math.floor(k / 2) : m;
22+
var pb = k - pa;
23+
if (nums1[pa - 1] < nums2[pb - 1]) {
24+
var t1 = nums1.slice(pa);
25+
return findKth(t1, nums2, k - pa);
26+
} else if (nums1[pa - 1] > nums2[pb - 1]) {
27+
var t2 = nums2.slice(pb);
28+
//nums2.splice(0,pb);
29+
return findKth(nums1, t2, k - pb);
30+
} else {
31+
return nums1[pa - 1];
32+
}
33+
};
34+
35+
var m = nums1.length;
36+
var n = nums2.length;
37+
var tol = m + n;
38+
if (tol / 2 - Math.floor(tol / 2) > 0.1) {
39+
return findKth(nums1, nums2, Math.floor(tol / 2) + 1);
40+
} else {
41+
return (
42+
(findKth(nums1, nums2, Math.floor(tol / 2)) +
43+
findKth(nums1, nums2, Math.floor(tol / 2) + 1)) /
44+
2
45+
);
46+
}
47+
};

algorithms/0014.longest-common-prefix/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
* 循环遍历
33
* 刚拿到这题没有细想,认为这题比较简单;直接使用循环遍历的方式一遍一遍顺序访问数组。当子字符串不相等时 Break,结果却超时了。简单了分析了原因在长数组的情况下,过多的进行了顺序访问,实践复杂度为 O(k\*n)。便放弃广度优先,改为深读优先。后面发现,是长度为 1 的数组进入了死循环。
44
* @status Time Limit Exceeded
5-
* @params `[""]`
65
*/
7-
var longestCommonPrefix = function(strs: string[]) {
6+
var longestCommonPrefix = (strs: string[]): string => {
87
let prefix: string = "";
98
if (strs && strs.length > 0) {
109
let point = 1;
@@ -28,7 +27,7 @@ var longestCommonPrefix = function(strs: string[]) {
2827
* @status Time Limit Exceeded
2928
* @params `["",""]`
3029
*/
31-
var longestCommonPrefix = function(strs: string[]) {
30+
var longestCommonPrefix = (strs: string[]): string => {
3231
let prefix: string = "";
3332
if (strs.length == 1) {
3433
return strs[0];
@@ -51,11 +50,12 @@ var longestCommonPrefix = function(strs: string[]) {
5150
/**
5251
* 单次遍历
5352
* 使用 `strs[0]` 作为初始前缀串,逐一遍历 `strs[]` 元素进行比较,如 `String.indexOf !== 0` 则自减长度 1,直至成立后继续访问后面的元素。
53+
* @time 2019.03.26
5454
* @status Accepted
55-
* @runtime 60ms < 92.74%
56-
* @memory 33.8MB < 86.74%
55+
* @runtime 60ms | 97.88%
56+
* @memory 33.8MB | 86.74%
5757
*/
58-
var longestCommonPrefix = (strs: string[]) => {
58+
var longestCommonPrefix = (strs: string[]): string => {
5959
if (strs && strs.length > 0) {
6060
let prefix: string = strs[0]; // 使用 strs[0] 作为初始前缀串
6161
for (let i = 1; i < strs.length; i++) {

algorithms/0017.letter-combinations-of-a-phone-number/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
/**
22
* 笛卡尔积
3+
* @time
4+
* @status
35
*/
46
var letterCombinations = function(digits: string) {
57
// 拨号键盘

algorithms/0050.powx-n/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,22 @@ Explanation: 2-2 = 1/22 = 1/4 = 0.25
2929

3030
- Math
3131
- Binary Search
32+
33+
## Submissions
34+
35+
### I: Math.pow
36+
37+
这里偷懒,直接调用了全局对象 Math 静态方法,Math#pow
38+
39+
- Time: 2019.04.19 10:39
40+
- Status: Acceted
41+
- Runtime: 76 ms > 42.42%
42+
- Memory: 34.2 MB < 13.79%
43+
```typescript
44+
var myPow = function(x: number, n: number): number | string {
45+
return Math.pow(x, n).toFixed(5);
46+
};
47+
```
48+
49+
## Top Ranked
50+

algorithms/0074.search-a-2d-matrix/index.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
/**
22
* 双层遍历
3-
* @runtime 64ms > 64.69%
4-
* @memory 35.4MB > 7.41%
3+
* @time 2019.3.15
4+
* @status Accepted
5+
* @runtime 64ms | 58.68%
6+
* @memory 35.4MB | 7.41%
57
*/
68
var searchMatrix = (matrix: number[][], target: number): boolean => {
79
for (let i = 0; i < matrix.length; i++) {
Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,22 @@
1-
/**
2-
* @runtime 104ms < 58.49%
3-
* @memory 37.3MB
4-
*/
5-
var singleNumber = (nums: number[]): any => {
6-
let map: any = {};
7-
nums.forEach(n => {
8-
if (n in map) {
9-
// map 已经存在 n
10-
map[n]++;
11-
} else {
12-
// 不存在
13-
map[n] = 1;
14-
}
15-
if (map[n] == 2) {
16-
// 存在并且 == 2
17-
delete map[n];
18-
}
19-
});
20-
return Object.keys(map);
21-
};
22-
231
/**
242
* 这里已经没有优化空间了,想想其他方法
25-
* @runtime 108ms >
26-
* @memory 36.9mb <
3+
* @hash 223496299
4+
* @time 2019.04.19
5+
* @status Accepted
6+
* @runtime 64 ms | 81.78%
7+
* @memory 36.9MB | 41.03%
278
*/
28-
var singleNumber = (nums: number[]): any => {
9+
var singleNumber = (nums: number[]): number => {
2910
let map: any = {};
30-
nums.forEach((n: number) => {
31-
if (n in map && map[n] == 1) {
32-
// 已经存在 且 == 1
33-
delete map[n];
11+
let length: number = nums.length;
12+
for (let i: number = 0; i < length; i++) {
13+
if (nums[i] in map && map[nums[i]] == 1) {
14+
// map 已经存在 n
15+
delete map[nums[i]];
3416
} else {
3517
// 不存在
36-
map[n] = 1;
18+
map[nums[i]] = 1;
3719
}
38-
});
39-
return Object.keys(map);
20+
}
21+
return Number(Object.keys(map)[0]);
4022
};

algorithms/0169.majority-element/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
* 通用解法
33
* @status Accepted
44
* @time 2019.03.01
5-
* @runtime 68ms > 87.42%
6-
* @momory 37.2MB < 88.35%
5+
* @runtime 68ms | 87.42%
6+
* @momory 37.2MB | 88.35%
77
*/
8-
var majorityElement = function(nums: number[]) {
8+
var majorityElement = (nums: number[]): number => {
99
let map: any = {};
1010
nums.forEach(n => {
1111
if (n in map) {
@@ -15,7 +15,7 @@ var majorityElement = function(nums: number[]) {
1515
}
1616
});
1717
let maximum = 0;
18-
let maxKey = undefined;
18+
let maxKey: any;
1919

2020
for (let k in map) {
2121
if (map[k] >= maximum) {

0 commit comments

Comments
 (0)