Skip to content

Commit 58f3b8d

Browse files
authored
Merge pull request #2198 from chjung99/main
[chjung99] WEEK 06 solutions
2 parents 6d51654 + 431e78f commit 58f3b8d

File tree

5 files changed

+202
-0
lines changed

5 files changed

+202
-0
lines changed

jump-game/chjung99.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
boolean isArrived;
3+
int SIZE;
4+
5+
public boolean canJump(int[] nums) {
6+
isArrived = false;
7+
SIZE = nums.length;
8+
9+
bfs(nums, 0);
10+
11+
return isArrived;
12+
}
13+
14+
public void bfs(int[] nums, int x) {
15+
Queue<Integer> q = new ArrayDeque<>();
16+
q.add(x);
17+
boolean[] visit = new boolean[SIZE];
18+
visit[x] = true;
19+
20+
int curX;
21+
int nextX;
22+
23+
while (!q.isEmpty()){
24+
curX = q.poll();
25+
isArrived = (curX + 1) == SIZE;
26+
if (isArrived) return;
27+
28+
for (int dx = 1; dx <= nums[curX]; dx++){
29+
nextX = curX + dx;
30+
if (nextX >= SIZE || visit[nextX]) continue;
31+
q.add(nextX);
32+
visit[nextX] = true;
33+
}
34+
}
35+
}
36+
}
37+
38+

maximum-subarray/chjung99.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
public int maxSubArray(int[] nums) {
3+
int n = nums.length;
4+
int[] sum = new int[n];
5+
6+
int minValue = 0;
7+
int answer = nums[0];
8+
9+
for (int i = 0; i < n; i++){
10+
if (i == 0) sum[i] = nums[i];
11+
else sum[i] = sum[i-1] + nums[i];
12+
}
13+
14+
for (int i = 0 ; i < n; i++){
15+
answer = Math.max(answer, sum[i] - minValue);
16+
if (minValue > sum[i]){
17+
minValue = sum[i];
18+
}
19+
}
20+
return answer;
21+
22+
}
23+
}
24+
25+

merge-intervals/chjung99.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
class Solution {
2+
public int[][] merge(int[][] intervals) {
3+
//sort by start_i
4+
List<Interval> ordered = new ArrayList<>();
5+
for (int i = 0; i < intervals.length; i++){
6+
ordered.add(new Interval(intervals[i]));
7+
}
8+
Collections.sort(ordered);
9+
10+
Deque<Interval> queue = new ArrayDeque<>();
11+
queue.add(ordered.get(0));
12+
//merge in order
13+
for (int i = 1; i < ordered.size(); i++) {
14+
Interval tail = queue.removeLast();
15+
Interval cur = ordered.get(i);
16+
17+
if (tail.end >= cur.start){
18+
Interval merged = new Interval(new int[]{Math.min(tail.start, cur.start), Math.max(tail.end, cur.end)});
19+
queue.add(merged);
20+
} else{
21+
queue.add(tail);
22+
queue.add(cur);
23+
}
24+
}
25+
int[][] answer = new int[queue.size()][2];
26+
int idx = 0;
27+
while (!queue.isEmpty()){
28+
answer[idx++] = queue.removeFirst().raw;
29+
}
30+
return answer;
31+
}
32+
class Interval implements Comparable<Interval>{
33+
int[] raw;
34+
int start;
35+
int end;
36+
37+
public Interval(int[] raw){
38+
this.raw = raw;
39+
this.start = raw[0];
40+
this.end = raw[1];
41+
}
42+
@Override
43+
public int compareTo(Interval o){
44+
return Integer.compare(this.start, o.start);
45+
}
46+
}
47+
}
48+
49+

rotate-image/chjung99.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public void rotate(int[][] matrix) {
3+
int tmp;
4+
int n = matrix.length;
5+
for (int i = 0; i < n; i++){
6+
for (int j = i; j < n; j++){
7+
tmp = matrix[j][i];
8+
matrix[j][i] = matrix[i][j];
9+
matrix[i][j] = tmp;
10+
}
11+
}
12+
for (int i = 0; i < n; i++){
13+
for (int j =0; j < (int)(n/2); j++){
14+
tmp = matrix[i][n-1-j];
15+
matrix[i][n-1-j] = matrix[i][j];
16+
matrix[i][j] = tmp;
17+
}
18+
}
19+
}
20+
}
21+
22+

spiral-matrix/chjung99.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
class Solution {
2+
// right, down, left, up
3+
int[] dx = {0, 1, 0, -1};
4+
int[] dy = {1, 0, -1, 0};
5+
boolean[][] visit;
6+
7+
int m;
8+
int n;
9+
public List<Integer> spiralOrder(int[][] matrix) {
10+
m = matrix.length;
11+
n = matrix[0].length;
12+
visit = new boolean[m][n];
13+
return bfs(matrix);
14+
}
15+
16+
public boolean outOfRange(int x, int y){
17+
return ((x < 0 || x >= m) || (y < 0 || y >= n));
18+
}
19+
20+
public List<Integer> bfs(int[][] matrix) {
21+
List<Integer> spiral = new ArrayList<>();
22+
23+
Queue<Point> q = new ArrayDeque<>();
24+
25+
int startX = 0;
26+
int startY = 0;
27+
int startDir = 0;
28+
29+
q.add(new Point(startX, startY, startDir));
30+
visit[startX][startY] = true;
31+
32+
while (!q.isEmpty()){
33+
Point cur = q.poll();
34+
spiral.add(matrix[cur.x][cur.y]);
35+
36+
int nextX = cur.x + dx[cur.dir];
37+
int nextY = cur.y + dy[cur.dir];
38+
int nextDir = cur.dir;
39+
40+
if (outOfRange(nextX, nextY) || visit[nextX][nextY]) {
41+
nextDir = (nextDir + 1) % 4;
42+
}
43+
44+
nextX = cur.x + dx[nextDir];
45+
nextY = cur.y + dy[nextDir];
46+
47+
if (!outOfRange(nextX, nextY) && !visit[nextX][nextY]){
48+
q.add(new Point(nextX, nextY, nextDir));
49+
visit[nextX][nextY] = true;
50+
}
51+
}
52+
return spiral;
53+
}
54+
55+
class Point{
56+
int x;
57+
int y;
58+
int dir;
59+
public Point(int x, int y, int dir){
60+
this.x = x;
61+
this.y = y;
62+
this.dir = dir;
63+
}
64+
}
65+
66+
}
67+
68+

0 commit comments

Comments
 (0)