Skip to content

Commit 08d4dc5

Browse files
committed
Modified 3 solutions
1 parent 897a32d commit 08d4dc5

3 files changed

+55
-79
lines changed
Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,36 @@
11
class Solution {
2-
int[][] dp;
2+
int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
33
public int longestIncreasingPath(int[][] matrix) {
44
if (matrix.length == 0 || matrix[0].length == 0) {
55
return 0;
66
}
77

8+
int[][] dp = new int[matrix.length][matrix[0].length];
89
int max = 0;
9-
dp = new int[matrix.length][matrix[0].length];
10-
1110
for (int i = 0; i < matrix.length; i++) {
1211
for (int j = 0; j < matrix[0].length; j++) {
13-
max = Math.max(max, getIncreasingPathLength(matrix, i, j, Integer.MIN_VALUE));
12+
max = Math.max(max, dfs(matrix, i, j, dp, Integer.MIN_VALUE));
1413
}
1514
}
1615

1716
return max;
1817
}
1918

20-
private int getIncreasingPathLength(int[][] matrix, int row, int col, int prev) {
21-
if (row < 0 ||
22-
col < 0 ||
23-
row >= matrix.length ||
24-
col >= matrix[0].length ||
25-
matrix[row][col] <= prev) {
19+
private int dfs(int[][] matrix, int x, int y, int[][] dp, int prevVal) {
20+
if (x < 0 || x >= matrix.length || y < 0 || y >= matrix[0].length || matrix[x][y] <= prevVal) {
2621
return 0;
2722
}
2823

29-
if (dp[row][col] != 0) {
30-
return dp[row][col];
24+
if (dp[x][y] != 0) {
25+
return dp[x][y];
3126
}
3227

33-
int up = getIncreasingPathLength(matrix, row - 1, col, matrix[row][col]);
34-
int down = getIncreasingPathLength(matrix, row + 1, col, matrix[row][col]);
35-
int right = getIncreasingPathLength(matrix, row, col + 1, matrix[row][col]);
36-
int left = getIncreasingPathLength(matrix, row, col - 1, matrix[row][col]);
37-
38-
dp[row][col] = 1 + Math.max(Math.max(up, down), Math.max(right, left));
28+
int temp = 0;
29+
for (int[] dir : dirs) {
30+
temp = Math.max(temp, dfs(matrix, x + dir[0], y + dir[1], dp, matrix[x][y]));
31+
}
3932

40-
return dp[row][col];
33+
dp[x][y] = temp + 1;
34+
return dp[x][y];
4135
}
4236
}

Medium/Flatten Nested List Iterator.java

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,35 @@
1616
* }
1717
*/
1818
public class NestedIterator implements Iterator<Integer> {
19-
List<Integer> list;
20-
int index;
21-
int size;
22-
public NestedIterator(List<NestedInteger> nestedList) {
23-
list = new ArrayList<>();
24-
index = 0;
25-
for (NestedInteger n : nestedList) {
26-
dfsHelper(n);
27-
}
28-
29-
size = list.size();
30-
}
3119

32-
private void dfsHelper(NestedInteger n) {
33-
if (n.isInteger()) {
34-
list.add(n.getInteger());
35-
}
36-
else {
37-
for (NestedInteger ni : n.getList()) {
38-
dfsHelper(ni);
39-
}
20+
Stack<NestedInteger> stack;
21+
public NestedIterator(List<NestedInteger> nestedList) {
22+
stack = new Stack<>();
23+
for (int i = nestedList.size() - 1; i >= 0; i--) {
24+
stack.push(nestedList.get(i));
4025
}
4126
}
4227

4328
@Override
4429
public Integer next() {
45-
if (index < size) {
46-
return list.get(index++);
47-
}
48-
return -1;
30+
return stack.pop().getInteger();
4931
}
5032

5133
@Override
5234
public boolean hasNext() {
53-
return !(index == size);
35+
while (!stack.isEmpty()) {
36+
NestedInteger curr = stack.peek();
37+
if (curr.isInteger()) {
38+
return true;
39+
}
40+
41+
NestedInteger temp = stack.pop();
42+
for (int i = temp.getList().size() - 1; i >= 0; i--) {
43+
stack.push(temp.getList().get(i));
44+
}
45+
}
46+
47+
return false;
5448
}
5549
}
5650

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,35 @@
11
class Solution {
2-
32
public String frequencySort(String s) {
4-
Map<Character, Integer> map = new HashMap<>();
5-
6-
for (int i=0;i<s.length();i++) {
7-
if (map.containsKey(s.charAt(i))) {
8-
map.put(s.charAt(i), map.get(s.charAt(i))+1);
9-
}
10-
else {
11-
map.put(s.charAt(i), 1);
12-
}
3+
List<Character> chars = new ArrayList<>();
4+
for (char c : s.toCharArray()) {
5+
chars.add(c);
136
}
147

15-
Map<Character, Integer> sortedMap = sortByValue(map);
16-
17-
18-
StringBuilder sb = new StringBuilder("");
19-
20-
for (Map.Entry<Character,Integer> entry : sortedMap.entrySet()) {
21-
String t = String.join("", Collections.nCopies(entry.getValue(), String.valueOf(entry.getKey())));
22-
sb.append(t);
8+
Map<Character, Integer> map = new HashMap<>();
9+
int val = 0;
10+
for (char c : chars) {
11+
map.put(c, map.getOrDefault(c, 0) + 1);
12+
val = Math.max(val, map.get(c));
2313
}
2414

25-
return sb.toString();
26-
}
27-
28-
private Map<Character, Integer> sortByValue(Map<Character, Integer> unsortMap) {
29-
30-
List<Map.Entry<Character, Integer>> list =
31-
new LinkedList<Map.Entry<Character, Integer>>(unsortMap.entrySet());
15+
Map<Integer, List<Character>> revMap = new HashMap<>();
16+
for (Character key : map.keySet()) {
17+
revMap.computeIfAbsent(map.get(key), k -> new ArrayList<>()).add(key);
18+
}
3219

33-
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
34-
public int compare(Map.Entry<Character, Integer> o1,
35-
Map.Entry<Character, Integer> o2) {
36-
return (o2.getValue()).compareTo(o1.getValue());
20+
StringBuilder sb = new StringBuilder();
21+
for (int i = val; i >= 0; i--) {
22+
if (revMap.containsKey(i)) {
23+
List<Character> characters = revMap.get(i);
24+
for (Character character : characters) {
25+
int count = i;
26+
while (count-- > 0) {
27+
sb.append(character);
28+
}
29+
}
3730
}
38-
});
39-
40-
Map<Character, Integer> sortedMap = new LinkedHashMap<Character, Integer>();
41-
for (Map.Entry<Character, Integer> entry : list) {
42-
sortedMap.put(entry.getKey(), entry.getValue());
4331
}
4432

45-
return sortedMap;
33+
return sb.toString();
4634
}
4735
}

0 commit comments

Comments
 (0)