Skip to content

Commit a3ce885

Browse files
committed
Second Commit
1 parent f20d517 commit a3ce885

15 files changed

+404
-10
lines changed

SortArray/mergeSortArray_88.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,7 @@ var merge=function(nums1,m,nums2,n){
6666
}
6767
```
6868

69+
70+
71+
**参考资料**
72+
  [leetcode题解](https://github.com/azl397985856/leetcode)

SortArray/remove-duplicates-from-sorted-array_26.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ for (int i = 0; i < len; i++) {
2424
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
2525
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2626

27+
2728
#### 思路:双指针
2829

2930
1.开始时。两个指针指向第一个数字
@@ -45,3 +46,9 @@ for (int i = 0; i < len; i++) {
4546
return arr.length=slowP+1;
4647
}
4748
```
49+
50+
51+
**[leetCode分类刷题](https://github.com/Longbao521/Leetcode_classify) &emsp; 该地址长期、每周更新LeetCode分类刷题**
52+
53+
**参考资料**
54+
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)

SortArray/two-sum-ii-input-array-is-sorted_167.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,9 @@ var twoSum=function(numbers,target){
9393
return [];
9494
}
9595
```
96+
97+
----
98+
**[leetCode分类刷题](https://github.com/Longbao521/Leetcode_classify) &emsp; 该地址长期、每周更新LeetCode分类刷题**
99+
96100
**参考资料**
97101
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)

Stack/Valid Parentheses_20.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,8 @@ Problem3: [1021. 删除最外层的括号](https://leetcode-cn.com/problems/remo
9090
2.如果有多个匹配字段,如解析HTMl或XML标记,因匹配类型过多,可以采用Map哈希表,存储匹配类型
9191
如:const mapper = {'{': "}","[": "]","(": ")"};
9292

93+
94+
95+
96+
**参考资料**
97+
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)

Stack/min-stack_155.md

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,74 @@ MinStack.prototype.getMin = function() {
8888
* var param_4 = obj.getMin()
8989
*/
9090
```
91-
**参考资料**
91+
---
92+
但是上面的运行成绩惨不忍睹,有没有优化方法?显然是有的,显然这道题中复杂度最高的就是getMin(),其余不过是一步操作而已,刚开始我故步自封于如何快速查找最小值,而忽略了它初始状态是一个空栈,后面每一次操作都会更新最小值,而不需要到了求getMIN()财去查找
93+
所以更新为:
94+
```javascript
95+
var MinStack = function() {
96+
this.stack = [];
97+
this.min = Number.MAX_VALUE;
98+
};
99+
100+
/**
101+
* @param {number} x
102+
* @return {void}
103+
*/
104+
MinStack.prototype.push = function(x) {
105+
// update 'min'
106+
const min = this.min;
107+
if (x < this.min) {
108+
this.min = x;
109+
}
110+
return this.stack.push(x - min);
111+
};
112+
113+
/**
114+
* @return {void}
115+
*/
116+
MinStack.prototype.pop = function() {
117+
const item = this.stack.pop();
118+
const min = this.min;
119+
120+
if (item < 0) {
121+
this.min = min - item;
122+
return min;
123+
}
124+
return item + min;
125+
};
126+
127+
/**
128+
* @return {number}
129+
*/
130+
MinStack.prototype.top = function() {
131+
const item = this.stack[this.stack.length - 1];
132+
const min = this.min;
133+
134+
if (item < 0) {
135+
return min;
136+
}
137+
return item + min;
138+
};
139+
140+
/**
141+
* @return {number}
142+
*/
143+
MinStack.prototype.getMin = function() {
144+
return this.min;
145+
};
146+
147+
/**
148+
* Your MinStack object will be instantiated and called as such:
149+
* var obj = new MinStack()
150+
* obj.push(x)
151+
* obj.pop()
152+
* var param_3 = obj.top()
153+
* var param_4 = obj.getMin()
154+
*/
155+
```
156+
157+
----
158+
**[leetCode分类刷题](https://github.com/Longbao521/Leetcode_classify) &emsp; 该地址长期、每周更新LeetCode分类刷题**
159+
160+
**参考资料**
161+
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)

notSortArr/majority-element_169.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# 169.多数元素
2+
<font color=gray size=2>2019-12-08 09:58:02 +0800</font>
3+
<font color=gray size=2>categories: dotnet</font>
4+
---
5+
6+
>给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
7+
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
8+
示例 1:
9+
输入: [3,2,3]
10+
输出: 3
11+
示例 2:
12+
输入: [2,2,1,1,1,2,2]
13+
输出: 2
14+
来源:力扣(LeetCode)
15+
链接:https://leetcode-cn.com/problems/majority-element
16+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
17+
18+
---
19+
20+
#### 信息
21+
+ 大小为n的无序数组
22+
+ 找出书组长出现次数大于n/2(向下取整)
23+
+ 数组非空,给定的数组必有多数元素
24+
25+
#### 思路
26+
+ 遍历数组,记录下每个元素出现的次数,若大于n/2则返回
27+
+ 投票算法。这个算法我调试了好久,才懂了点皮毛,如有错误,敬请指点
28+
29+
投票算法,顾名思义是用投票的思想解题,我们用[2,3,2,1,3,1,3,2,3,2]来做例子
30+
31+
+ majority=2,count=1; 初始状态,第一个元素首先得一票
32+
+ majority=2,count=0; 不同元素,majority所指代的元素(竞争者)票数减一
33+
+ majority=2,count=1; 竞争者本来要换人,但是巧在竞争者又得了一票
34+
+ majority=2,count=0; 又丧失一票
35+
+ majority=3,count=1; 换人了,让我们看一下新选手
36+
+ majority=3,count=0; 首战不利呀,看来注定短命呀
37+
+ majority=3,count=1; 恩?打脸了?不错
38+
+ majority=3,count=0; 不要放弃,加油
39+
+ majority=3,count=1; 提前预祝成功了
40+
+ majority=3,count=0; 你无所谓了,我们已经胜利了,胜利者3
41+
42+
43+
44+
#### 求解
45+
```javascript
46+
var majorityElement = function(nums) {
47+
var resultNum = Math.floor(nums.length/2);//Math.floor是向下取整,Math.ceil是向上取整
48+
if(!resultNum){
49+
return nums[0];
50+
}
51+
var storeMap=new Map();
52+
for(let elem of nums){
53+
let getNum = storeMap.get(elem);
54+
if( getNum === undefined){//get得到的是undefined
55+
storeMap.set(elem,1);
56+
}else{
57+
if(getNum+1>resultNum){
58+
return elem;
59+
}
60+
storeMap.set(elem,getNum+1);
61+
}
62+
}
63+
};
64+
```
65+
66+
67+
```javascript
68+
var majorityElement = function(nums) {
69+
var count =1;
70+
var marjority=nums[0];
71+
for(let elem of nums){
72+
if(!count){
73+
marjority=elem;
74+
}
75+
if(elem == marjority){
76+
count++;
77+
}else{
78+
count--;
79+
}
80+
}
81+
return marjority
82+
};
83+
```
84+
85+
---
86+
87+
**参考资料**
88+
[LeetCode题解](https://github.com/azl397985856/leetcode)

notSortArr/maximum-sum-subarray _53.md

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
>>53.最大子序和
2-
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
1+
# 53.最大子序和
2+
>>给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
33
示例:
44
输入: [-2,1,-3,4,-1,2,1,-5,4],
55
输出: 6
@@ -37,13 +37,12 @@
3737
**5.分治法**
3838
###### &emsp;分治法采用树的思想进行求解
3939
>>我们把数组nums以中间位置(m)分为左(left)右(right)两部分. 那么有, left = nums[0]...nums[m - 1] 和 right = nums[m + 1]...nums[n-1]
40-
4140
最大子序列和的位置有以下三种情况:
42-
4341
5.1.考虑中间元素nums[m], 跨越左右两部分,这里从中间元素开始,往左求出后缀最大,往右求出前缀最大, 保持连续性。
4442
5.2.不考虑中间元素,最大子序列和出现在左半部分,递归求解左边部分最大子序列和
4543
5.3.不考虑中间元素,最大子序列和出现在右半部分,递归求解右边部分最大子序列和
4644
分别求出三种情况下最大子序列和,三者中最大值即为最大子序列和。
45+
4746
![分治法示意图](../jpg/maximum-sum-subarray-divideconquer.png)
4847

4948
```javascript
@@ -92,4 +91,43 @@ function maxSubArray_2(arr){
9291
ans=Math.max(ans,sum);//每一次都要与当前的最大值进行比较,决定是否要更新
9392
}
9493
}
95-
```
94+
```
95+
96+
```javascript
97+
function helper(list, m, n) {
98+
if (m === n) return list[m];
99+
let sum = 0;
100+
let lmax = -Number.MAX_VALUE;
101+
let rmax = -Number.MAX_VALUE;
102+
const mid = ((n - m) >> 1) + m;
103+
const l = helper(list, m, mid);
104+
const r = helper(list, mid + 1, n);
105+
for (let i = mid; i >= m; i--) {
106+
sum += list[i];
107+
if (sum > lmax) lmax = sum;
108+
}
109+
110+
sum = 0;
111+
112+
for (let i = mid + 1; i <= n; i++) {
113+
sum += list[i];
114+
if (sum > rmax) rmax = sum;
115+
}
116+
117+
return Math.max(l, r, lmax + rmax);
118+
}
119+
120+
function LSS(list) {
121+
return helper(list, 0, list.length - 1);
122+
}
123+
```
124+
125+
126+
127+
128+
129+
130+
131+
132+
**参考资料**
133+
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)

notSortArr/single-number_136.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@ var singleNumber = function(nums) {
3535
}
3636
return reslut;
3737
};
38-
```
38+
```
39+
40+
41+
42+
**参考资料**
43+
&emsp;&emsp;[leetcode题解](https://github.com/azl397985856/leetcode)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 172. 阶乘后的零
2+
<font color=gray size=2>2019-12-04 20:10:19 +0800</font>
3+
<font color=gray size=2>categories: dotnet</font>
4+
---
5+
6+
>>给定一个整数 n,返回 n! 结果尾数中零的数量。
7+
示例 1:
8+
输入: 3
9+
输出: 0
10+
解释: 3! = 6, 尾数中没有零。
11+
示例 2:
12+
输入: 5
13+
输出: 1
14+
解释: 5! = 120, 尾数中有 1 个零.
15+
说明: 你算法的时间复杂度应为 O(log n) 。
16+
来源:力扣(LeetCode)
17+
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
18+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
19+
20+
---
21+
22+
#### 信息
23+
+ 返回n的阶乘结果中零的数量
24+
+ 时间复杂度为O(log n) 
25+
26+
#### 思路
27+
28+
+ 要求有多少个0,其实就是阶乘后的结果是n*2<sup>k</sup>*5<sup>k</sup>,求k。由于明显2的个数要多于5,所以其结果就是求阶乘中每一个元素分解质因数后一共有多少个5
29+
30+
#### 求解
31+
```javascript
32+
var trailingZeroes = function(n) {
33+
// tag: 数论
34+
35+
// if (n === 0) return n;
36+
37+
// 递归: f(n) = n / 5 + f(n / 5)
38+
// return Math.floor(n / 5) + trailingZeroes(Math.floor(n / 5));
39+
let count = 0;
40+
while (n >= 5) {
41+
count += Math.floor(n / 5);
42+
n = Math.floor(n / 5);
43+
}
44+
return count;
45+
};
46+
```
47+
48+
---
49+
50+
**参考资料**
51+
[LeetCode题解](https://github.com/azl397985856/leetcode)

0 commit comments

Comments
 (0)