Skip to content

Commit aa44e4b

Browse files
authored
Merge pull request #2148 from chjung99/main
2 parents 541e16b + 25ab889 commit aa44e4b

File tree

5 files changed

+184
-0
lines changed

5 files changed

+184
-0
lines changed

counting-bits/chjung99.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// time: O(n)
2+
// space: O(n)
3+
4+
class Solution {
5+
public int[] countBits(int n) {
6+
int[] ans = new int[n+1];
7+
8+
if (n >= 1){
9+
ans[0] = 0;
10+
ans[1] = 1;
11+
}
12+
int fac = 2;
13+
int prev = 1;
14+
15+
for (int i = 2; i <= n; i++){
16+
if (i == fac){
17+
prev = fac;
18+
fac *= 2;
19+
20+
ans[i] = 1;
21+
continue;
22+
}
23+
24+
ans[i] = 1+ ans[i-prev];
25+
}
26+
27+
return ans;
28+
}
29+
}
30+
31+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// brute force
2+
// time: O(N^3)
3+
// space: O(N)
4+
5+
class Solution {
6+
public String longestPalindrome(String s) {
7+
String answer = "";
8+
int maxLen = 0;
9+
int sLen = s.length();
10+
11+
for (int i = 0; i < sLen; i++){
12+
for (int j = i ; j < sLen; j++){
13+
String substring = s.substring(i, j+1);
14+
if (isPalindrom(substring) && maxLen < (j-i+1)){
15+
maxLen = (j-i+1);
16+
answer = substring;
17+
}
18+
}
19+
}
20+
21+
return answer;
22+
}
23+
24+
public boolean isPalindrom(String s){
25+
int start = 0;
26+
int end = s.length()-1;
27+
28+
29+
while(start < end) {
30+
if (s.charAt(start) == s.charAt(end)){
31+
start++;
32+
end--;
33+
} else {
34+
return false;
35+
}
36+
}
37+
38+
return true;
39+
}
40+
41+
}
42+
43+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// two pointer
2+
// time: O(N)
3+
// space: O(N)
4+
class Solution {
5+
public int lengthOfLongestSubstring(String s) {
6+
int answer = 0;
7+
Set<Character> charSet = new HashSet<>();
8+
int head = 0;
9+
int tail = 0;
10+
11+
for (int i = 0; i < s.length(); i++){
12+
Character ch = Character.valueOf(s.charAt(i));
13+
while (charSet.contains(ch)) {
14+
charSet.remove(Character.valueOf(s.charAt(head++)));
15+
}
16+
charSet.add(ch);
17+
tail += 1;
18+
answer = Math.max(answer, charSet.size());
19+
}
20+
return answer;
21+
}
22+
}
23+

missing-number/chjung99.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// time: O(N)
2+
// space: O(1)
3+
4+
class Solution {
5+
public int missingNumber(int[] nums) {
6+
int maxValue = 0;
7+
int sum = 0;
8+
for (int i = 0; i < nums.length; i++){
9+
if (maxValue < nums[i]) maxValue = nums[i];
10+
sum += nums[i];
11+
}
12+
int n = Math.max(nums.length, maxValue);
13+
14+
return (int) (n * (n + 1))/2 - sum;
15+
}
16+
}
17+
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// time: O(N^2)
2+
// space: O(N)
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
class Solution {
20+
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
21+
Deque<TreeNode> deque = new ArrayDeque<>();
22+
deque.add(root);
23+
24+
while (!deque.isEmpty()){
25+
TreeNode cur = deque.poll();
26+
27+
if (isEqual(cur, subRoot)) {
28+
return true;
29+
}
30+
31+
if (cur.left != null) deque.add(cur.left);
32+
if (cur.right != null) deque.add(cur.right);
33+
}
34+
return false;
35+
}
36+
37+
public boolean isEqual(TreeNode x, TreeNode y){
38+
Deque<TreeNode> dequeX = new ArrayDeque<>();
39+
Deque<TreeNode> dequeY = new ArrayDeque<>();
40+
41+
dequeX.add(x);
42+
dequeY.add(y);
43+
44+
while (!dequeX.isEmpty()||!dequeY.isEmpty()){
45+
TreeNode curX = dequeX.poll();
46+
TreeNode curY = dequeY.poll();
47+
48+
if (curX.val != curY.val) return false;
49+
50+
if (curX.left != null && curY.left != null){
51+
dequeX.add(curX.left);
52+
dequeY.add(curY.left);
53+
} else if (curX.left == null && curY.left == null){
54+
;
55+
} else{
56+
return false;
57+
}
58+
if (curX.right != null && curY.right != null){
59+
dequeX.add(curX.right);
60+
dequeY.add(curY.right);
61+
} else if (curX.right == null && curY.right == null){
62+
;
63+
} else{
64+
return false;
65+
}
66+
}
67+
return (dequeX.isEmpty() && dequeY.isEmpty());
68+
}
69+
}
70+

0 commit comments

Comments
 (0)