forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsmosco.js
More file actions
48 lines (43 loc) Β· 1.51 KB
/
smosco.js
File metadata and controls
48 lines (43 loc) Β· 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* Maximum Subarray - λΈλ£¨νΈν¬μ€ (μμ νμ)
*
* ν΅μ¬ μμ΄λμ΄:
* - λͺ¨λ κ°λ₯ν μ°μ λΆλΆ λ°°μ΄μ ν©μ κ³μ°νμ¬ μ΅λκ° μ°ΎκΈ°
* - iλ²μ§ΈλΆν° jλ²μ§ΈκΉμ§μ ν©μ λμ νλ©΄μ κ³μ°
*
* μκ° λ³΅μ‘λ: O(nΒ²) - μ΄μ€ λ°λ³΅λ¬ΈμΌλ‘ λͺ¨λ κ΅¬κ° νμ
* κ³΅κ° λ³΅μ‘λ: O(1) - λ³μ λͺ κ°λ§ μ¬μ©
*/
const maxSubArray = (nums) => {
const n = nums.length;
let maxSoFar = nums[0];
for (let i = 0; i < n; i++) {
let currentSum = 0;
for (let j = i; j < n; j++) {
currentSum += nums[j]; // iλΆν° jκΉμ§μ λμ ν©
maxSoFar = Math.max(maxSoFar, currentSum);
}
}
return maxSoFar;
};
/**
* Maximum Subarray - Kadane's Algorithm
*
* ν΅μ¬ μμ΄λμ΄:
* - κ° μμΉμμ "νμ¬ μ«μλ§μΌλ‘ μλ‘ μμ vs μ΄μ ν©μ νμ¬ μ«μ μΆκ°" μ€ λ ν° κ° μ ν
* - currentMax = max(νμ¬ μ«μ, μ§κΈκΉμ§ ν© + νμ¬ μ«μ)
* - μ¦, μ΄μ κΉμ§μ ν©μ΄ νμ¬μ λμμ΄ μ λλ©΄ λ²λ¦¬κ³ μλ‘ μμ
*
* μκ° λ³΅μ‘λ: O(n) - λ°°μ΄μ ν λ²λ§ μν
* κ³΅κ° λ³΅μ‘λ: O(1) - λ³μ λ κ°λ§ μ¬μ©
*/
const maxSubArrayKadane = (nums) => {
let currentMax = nums[0]; // νμ¬ μμΉκΉμ§μ μ΅λ ν©
let globalMax = nums[0]; // μ 체 μ΅λ ν©
for (let i = 1; i < nums.length; i++) {
// ν΅μ¬: μ΄μ ν©μ λν μ§ vs μλ‘ μμν μ§
currentMax = Math.max(nums[i], currentMax + nums[i]);
globalMax = Math.max(globalMax, currentMax);
}
return globalMax;
};