Skip to content

Commit 0610e79

Browse files
authored
Merge pull request #97 from Xtha-Sunil/medium
Medium
2 parents b0982c4 + 6b2c584 commit 0610e79

13 files changed

Lines changed: 424 additions & 0 deletions
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
18+
public List<List<Integer>> levelOrderBottom(TreeNode root) {
19+
if (root == null) return new ArrayList<>();
20+
21+
List<List<Integer>> list = new ArrayList<>();
22+
23+
dfs(root, 0, list);
24+
25+
int size = list.size();
26+
for (int i = 0; i < size / 2; i++) {
27+
List<Integer> newList = list.get(i);
28+
list.set(i, list.get(size - i - 1));
29+
list.set(size - i - 1, newList);
30+
}
31+
32+
return list;
33+
}
34+
35+
public void dfs(TreeNode node, int level, List<List<Integer>> list) {
36+
if (node == null) return;
37+
38+
if (level == list.size()) list.add(new ArrayList<>());
39+
40+
list.get(level).add(node.val);
41+
42+
dfs(node.left, level + 1, list);
43+
dfs(node.right, level + 1, list);
44+
}
45+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
18+
private TreeNode prev = null;
19+
20+
public void flatten(TreeNode root) {
21+
if (root == null) return;
22+
23+
flatten(root.right); // right first
24+
flatten(root.left);
25+
26+
root.right = prev;
27+
root.left = null;
28+
prev = root;
29+
}
30+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
3+
public String reverseWords(String s) {
4+
char[] st = s.toCharArray();
5+
char[] arr = new char[st.length];
6+
int ind = reversewordslength(st, arr, 0);
7+
return new String(arr, 0, ind);
8+
}
9+
10+
public int reversewordslength(char[] st, char[] arr, int start) {
11+
while (start < st.length && st[start] == ' ') {
12+
start++;
13+
}
14+
int end = start;
15+
while (end < st.length && st[end] != ' ') {
16+
end++;
17+
}
18+
if (start - end == 0) {
19+
return 0;
20+
}
21+
int reversedwordlen = reversewordslength(st, arr, end);
22+
if (reversedwordlen != 0) {
23+
arr[reversedwordlen] = ' ';
24+
reversedwordlen++;
25+
}
26+
while (start < end) {
27+
arr[reversedwordlen++] = st[start++];
28+
}
29+
return reversedwordlen;
30+
}
31+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
3+
public int maxProduct(int[] nums) {
4+
var maxProd = Integer.MIN_VALUE;
5+
var prod = 1;
6+
for (var i = 0; i < nums.length; i++) {
7+
prod *= nums[i];
8+
maxProd = Math.max(prod, maxProd);
9+
if (prod == 0) {
10+
prod = 1;
11+
}
12+
}
13+
prod = 1;
14+
for (var i = nums.length - 1; i >= 0; i--) {
15+
prod *= nums[i];
16+
maxProd = Math.max(prod, maxProd);
17+
if (prod == 0) {
18+
prod = 1;
19+
}
20+
}
21+
return maxProd;
22+
}
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
3+
public int findPeakElement(int[] nums) {
4+
int left = 0,
5+
right = nums.length - 1;
6+
7+
while (left < right) {
8+
int mid = left + (right - left) / 2;
9+
10+
if (nums[mid] > nums[mid + 1]) {
11+
// Peak must be on the left (including mid)
12+
right = mid;
13+
} else {
14+
// Peak must be on the right
15+
left = mid + 1;
16+
}
17+
}
18+
19+
// left == right is the index of a peak
20+
return left;
21+
}
22+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution {
2+
3+
String[] mapping = new String[] {
4+
"",
5+
"",
6+
"abc",
7+
"def",
8+
"ghi",
9+
"jkl",
10+
"mno",
11+
"pqrs",
12+
"tuv",
13+
"wxyz",
14+
};
15+
List<String> res = new ArrayList<>();
16+
17+
public void phoneComb(int idx, StringBuilder op, String digits) {
18+
if (idx >= digits.length()) {
19+
res.add(op.toString());
20+
return;
21+
}
22+
23+
String val = mapping[digits.charAt(idx) - '0'];
24+
25+
for (char ch : val.toCharArray()) {
26+
op.append(ch);
27+
28+
phoneComb(idx + 1, op, digits);
29+
30+
op.deleteCharAt(op.length() - 1);
31+
}
32+
}
33+
34+
public List<String> letterCombinations(String digits) {
35+
if (digits.length() == 0) {
36+
return res;
37+
}
38+
39+
phoneComb(0, new StringBuilder(), digits);
40+
41+
return res;
42+
}
43+
}

leetcode/medium/50_powx-n.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
3+
public double myPow(double x, int n) {
4+
return helper(x, (long) n);
5+
}
6+
7+
private static double helper(double a, long b) {
8+
if (b == 0)
9+
return 1;
10+
if (b < 0)
11+
return 1 / helper(a, -b);
12+
if (b % 2 != 0)
13+
return a * helper(a * a, (b - 1) / 2);
14+
return helper(a * a, b / 2);
15+
}
16+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
3+
public List<Integer> spiralOrder(int[][] matrix) {
4+
int left = 0,
5+
right = matrix[0].length - 1;
6+
int top = 0,
7+
bottom = matrix.length - 1;
8+
List<Integer> ans = new ArrayList<>();
9+
10+
while (left <= right && top <= bottom) {
11+
for (int i = left; i <= right; i++) {
12+
ans.add(matrix[top][i]);
13+
}
14+
top++;
15+
16+
for (int i = top; i <= bottom; i++) {
17+
ans.add(matrix[i][right]);
18+
}
19+
right--;
20+
21+
if (top <= bottom) {
22+
for (int i = right; i >= left; i--) {
23+
ans.add(matrix[bottom][i]);
24+
}
25+
bottom--;
26+
}
27+
28+
if (left <= right) {
29+
for (int i = bottom; i >= top; i--) {
30+
ans.add(matrix[i][left]);
31+
}
32+
left++;
33+
}
34+
}
35+
return ans;
36+
}
37+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
3+
public int[][] generateMatrix(int n) {
4+
int index = 1;
5+
int top = 0,
6+
bottom = n - 1;
7+
int left = 0,
8+
right = n - 1;
9+
int[][] matrix = new int[n][n];
10+
while (top <= bottom && left <= right) {
11+
for (int i = left; i <= right; i++) {
12+
matrix[top][i] = index;
13+
index++;
14+
}
15+
top++;
16+
17+
for (int i = top; i <= bottom; i++) {
18+
matrix[i][right] = index;
19+
index++;
20+
}
21+
right--;
22+
23+
if (top <= bottom) {
24+
for (int i = right; i >= left; i--) {
25+
matrix[bottom][i] = index;
26+
index++;
27+
}
28+
bottom--;
29+
}
30+
31+
if (left <= right) {
32+
for (int i = bottom; i >= top; i--) {
33+
matrix[i][left] = index;
34+
index++;
35+
}
36+
left++;
37+
}
38+
}
39+
return matrix;
40+
}
41+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
3+
public boolean searchMatrix(int[][] matrix, int target) {
4+
int m = matrix.length;
5+
int n = matrix[0].length;
6+
7+
int left = 0;
8+
int right = m * n - 1;
9+
10+
while (left <= right) {
11+
int mid = left + (right - left) / 2;
12+
int midValue = matrix[mid / n][mid % n];
13+
14+
if (midValue == target) {
15+
return true;
16+
} else if (midValue < target) {
17+
left = mid + 1;
18+
} else {
19+
right = mid - 1;
20+
}
21+
}
22+
return false;
23+
}
24+
}

0 commit comments

Comments
 (0)