forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrivkode.java
More file actions
69 lines (50 loc) ยท 2.4 KB
/
rivkode.java
File metadata and controls
69 lines (50 loc) ยท 2.4 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
1. ๋ฌธ์ ์ดํด
[-2,1,-3,4,-1,2,1,-5,4]
* ์ ๋ต๋ถ๋ถ ์ฐธ๊ณ
๊ฐ ์ธ๋ฑ์ค๋ฅผ ์์์ ์ผ๋ก ์ก๊ณ ๋ชจ๋ ๋ถ๋ถ์ ๋ํ ๋ถ๋ถ ๋ฐฐ์ด์ ํฉ์ ๊ตฌํ๋ค
์ด์ ์ ๊ณ์ฐํ๋ ๋ด์ฉ์ ์ ์ฅํด์ ์ฌ์ฉํ๋ค
-> ์ด๋ ๊ฒ ๊ณ์ฐํด๋ Time Limit Exceeded ๋ฐ์ํ๋ค ..
๊ฒฐ๊ตญ์ ์ด๋ ๊ฒ ํด๋ n^2 ์๊ฐ์ด ๋ฐ์ํ๋ฏ๋ก ์๊ฐ์ด๊ณผ
ํฌ์ธํธ๋ n^2 ๊ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ด๋ป๊ฒ nlogn์ด๋ n์ผ๋ก ์ค์ผ ์ ์๋์ง์
* ์ ๋ต ๋ถ๋ถ ์ฐธ๊ณ
๋์ ํฉ์ด ์์๋ผ๋ฉด ์์ ์ธ๋ฑ์ค๋ฅผ ๋ค์์ผ๋ก ๊ณผ๊ฐํ๊ฒ ์ฎ๊ธด๋ค
์ด ๋ฌธ์ ๋ ์ง๊ด์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ณด๋๊ฒ์ด ์ค์ํ๋ค.
์๋ง๋ ์ด๋ ๊ฒ ์ ๊ทผํ๋๊ฑด ์ด๋จ๊น ?
๋๋ ์ต๋ํฉ์ ๊ตฌํ๊ณ ์ถ์๋ค. ๋ถ๋ถ ๋ฐฐ์ด๋ก!
๋ถ๋ถ๋ฐฐ์ด์ด๋ผ๋ ๊ฒ์ ์ฐ์๋๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
์ฆ, ์ฐ์๋์ด์ผ ํ๋ฏ๋ก ์ด์ ์ ํฉ๋ค์ด ๋ง์ฝ ์์๋ผ๋ฉด ? ์ด ๋ถ๋ถ๋ค์ ํ์๊ฐ ์์ด์ง๋ฏ๋ก ๊ณผ๊ฐํ ๋ฒ๋ฆด ์ ์๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ํฌ์ธํธ์๋ค.
๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ ์๋ฏธ๋ ? -> ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ ์ด์ ์ ์ฒด์ ๊ฐ๋ค์ ํฉ์ ๋น๊ตํด์ ํ์ฌ ์ธ๋ฑ์ค๋ถํฐ ๋ค์ ์ถ๋ฐํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋น๊ตํด์ ๋ ํฐ๊ฐ์ total๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ์ด๊ฑธ ์ฒ์๋ถํฐ ์์๋ค๋ฉด ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ์์ฑํ n^2 ๋ฅผ ์์ํ๋ฉด์ ๋ชจ๋ ํฉ์ ๊ตฌํ๋ ค ํ์๋ ๋นํจ์จ์ ์ธ๊ฒ์ ์ง๊ฐํ๋ค๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ ์ ์์์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์ total, maxTotal์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ก ์ง์ ํด์คฌ๊ธฐ ๋๋ฌธ์ i ์ธ๋ฑ์ค๋ 1๋ถํฐ ์์ํด์ผํ๋ค
*/
import java.util.*;
class Solution {
public int maxSubArray(int[] nums) {
int total = nums[0];
int maxTotal = nums[0];
for (int i=1; i<nums.length; i++) {
total = Math.max(nums[i], total + nums[i]);
maxTotal = Math.max(total, maxTotal);
}
return maxTotal;
// for (int i=0; i<nums.length; i++) {
// int total = 0;
// for (int j=i; j<nums.length; j++) {
// total += nums[j];
// max = Math.max(total, max);
// if (total < 0) {
// break;
// }
// }
// }
// return max;
}
private int sum(int[] arr, int start, int end) {
int cnt = 0;
for (int i=start; i<end + 1; i++) {
cnt += arr[i];
}
return cnt;
}
}