Skip to content

Commit 1c99505

Browse files
authored
Merge pull request #2266 from chjung99/main
[chjung99] WEEK 09 solutions
2 parents 37291ee + d815b5c commit 1c99505

5 files changed

Lines changed: 172 additions & 0 deletions

File tree

clone-graph/chjung99.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
// Definition for a Node.
3+
class Node {
4+
public int val;
5+
public List<Node> neighbors;
6+
public Node() {
7+
val = 0;
8+
neighbors = new ArrayList<Node>();
9+
}
10+
public Node(int _val) {
11+
val = _val;
12+
neighbors = new ArrayList<Node>();
13+
}
14+
public Node(int _val, ArrayList<Node> _neighbors) {
15+
val = _val;
16+
neighbors = _neighbors;
17+
}
18+
}
19+
*/
20+
21+
class Solution {
22+
public Node cloneGraph(Node node) {
23+
if (node == null) return node;
24+
return deepCopy(node);
25+
}
26+
27+
public Node deepCopy(Node node) {
28+
Deque<Node> deque = new ArrayDeque<>();
29+
Node root = new Node(node.val, new ArrayList<>());
30+
Map<Integer, Node> visit = new HashMap<>();
31+
32+
visit.put(1, root);
33+
deque.add(node);
34+
35+
while (!deque.isEmpty()) {
36+
Node cur = deque.poll();
37+
for (Node next: cur.neighbors) {
38+
if (!visit.containsKey(next.val)){
39+
visit.put(next.val, new Node(next.val, new ArrayList<>()));
40+
deque.add(next);
41+
}
42+
visit.get(cur.val).neighbors.add(visit.get(next.val));
43+
}
44+
}
45+
return root;
46+
}
47+
}
48+
49+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public int findMin(int[] nums) {
3+
int left = 0;
4+
int right = nums.length - 1;
5+
int mid = (left + right) / 2;
6+
while (left + 1 < right){
7+
mid = (left + right) / 2;
8+
if (nums[mid] > nums[right]) {
9+
left = mid;
10+
}
11+
if (nums[mid] < nums[right]) {
12+
right = mid;
13+
}
14+
}
15+
mid = (left + right) / 2;
16+
if (nums[mid] > nums[right]) return nums[right];
17+
else {
18+
return nums[mid];
19+
}
20+
}
21+
}
22+
23+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public int maxProduct(int[] nums) {
3+
int n = nums.length;
4+
int[] dpMax = new int[n];
5+
int[] dpMin = new int[n];
6+
7+
dpMax[0] = nums[0];
8+
dpMin[0] = nums[0];
9+
for (int i = 1; i < n; i++){
10+
dpMax[i] = Math.max(Math.max(dpMax[i-1]*nums[i], nums[i]), dpMin[i-1]*nums[i]);
11+
dpMin[i] = Math.min(Math.min(dpMin[i-1]*nums[i], nums[i]), dpMax[i-1]*nums[i]);
12+
}
13+
return findMax(dpMax);
14+
}
15+
16+
public int findMax(int[] dp) {
17+
int answer = dp[0];
18+
for (int i = 0; i < dp.length; i++) {
19+
answer = Math.max(dp[i], answer);
20+
}
21+
return answer;
22+
}
23+
}
24+

reorder-list/chjung99.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public void reorderList(ListNode head) {
13+
Map<Integer, ListNode> order = new HashMap<>();
14+
ListNode start = head;
15+
int n = 0;
16+
17+
while (start != null) {
18+
order.put(n, start);
19+
start = start.next;
20+
n++;
21+
}
22+
23+
ListNode cur = head;
24+
List<Integer> newOrder = generateOrder(n);
25+
26+
for (int i = 0; i < n; i++) {
27+
int idx = newOrder.get(i);
28+
cur = order.get(idx);
29+
if (i + 1 < n) {
30+
cur.next = order.get(newOrder.get(i+1));
31+
} else {
32+
cur.next = null;
33+
}
34+
cur = cur.next;
35+
}
36+
}
37+
public List<Integer> generateOrder(int n) {
38+
List<Integer> reorder = new ArrayList<>();
39+
int[] asc = new int[n];
40+
int[] desc = new int[n];
41+
42+
for (int i = 0; i < n; i++) {
43+
asc[i] = i;
44+
desc[i] = n - 1 - i;
45+
}
46+
47+
for (int i = 0; i< n; i++) {
48+
if (i % 2 == 0) {
49+
reorder.add(asc[i/2]);
50+
} else {
51+
reorder.add(desc[i/2]);
52+
}
53+
}
54+
return reorder;
55+
}
56+
}
57+

word-break/chjung99.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public boolean wordBreak(String s, List<String> wordDict) {
3+
Set<String> wordSet = new HashSet<>(wordDict);
4+
int n = s.length();
5+
boolean[] dp = new boolean[n];
6+
for (int i = 0; i < n; i++) {
7+
dp[i] = wordSet.contains(s.substring(0, i+1));
8+
for (int j = 0; j < i; j++) {
9+
if (dp[j] && wordSet.contains(s.substring(j+1, i+1))){
10+
dp[i] = true;
11+
}
12+
}
13+
}
14+
15+
return dp[n-1];
16+
}
17+
}
18+
19+

0 commit comments

Comments
 (0)