Skip to content

Commit ece674f

Browse files
committed
Refactored 4 solutions
1 parent 9ac0bd9 commit ece674f

4 files changed

+83
-85
lines changed

Easy/Closest Binary Search Tree Value.java

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,26 @@
88
* }
99
*/
1010
class Solution {
11-
int ans = 0;
11+
public int closestValue(TreeNode root, double target) {
12+
int[] ans = {0};
1213
double minDiff = Double.MAX_VALUE;
13-
14-
public int closestValue(TreeNode root, double target) {
15-
updateVal(root, target);
16-
return ans;
14+
helper(root, target, ans, minDiff);
15+
return ans[0];
16+
}
17+
18+
private void helper(TreeNode root, double target, int[] ans, double minDiff) {
19+
if (root == null) {
20+
return;
1721
}
18-
19-
private void updateVal(TreeNode root, double target) {
20-
if (root == null) {
21-
return;
22-
}
23-
24-
if (Math.abs(root.val - target) < minDiff) {
25-
minDiff = Math.abs(root.val - target);
26-
ans = root.val;
27-
}
28-
29-
if (root.val < target) {
30-
updateVal(root.right, target);
31-
}
32-
else {
33-
updateVal(root.left, target);
34-
}
22+
if (Math.abs(root.val - target) < minDiff) {
23+
minDiff = Math.abs(root.val - target);
24+
ans[0] = root.val;
3525
}
26+
if (root.val < target) {
27+
helper(root.right, target, ans, minDiff);
28+
}
29+
else {
30+
helper(root.left, target, ans, minDiff);
31+
}
32+
}
3633
}

Easy/Goat Latin.java

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
class Solution {
2-
public static String toGoatLatin(String S) {
3-
4-
StringBuilder sb = new StringBuilder("");
5-
String[] strs = S.split("\\s+");
6-
7-
String vowels = "aeiou";
8-
StringBuilder suffix = new StringBuilder("a");
9-
10-
for (String s : strs) {
11-
if (vowels.indexOf(s.toLowerCase().charAt(0)) != -1) {
12-
sb.append(s).append("ma").append(suffix).append(" ");
13-
}
14-
else {
15-
sb.append(s.substring(1, s.length())).append(s.charAt(0)).append("ma").append(suffix).append(" ");
16-
}
17-
18-
suffix.append("a");
19-
}
20-
21-
return sb.toString().trim();
2+
public String toGoatLatin(String S) {
3+
StringBuilder addAString = new StringBuilder("a");
4+
StringBuilder sb = new StringBuilder();
5+
Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u'));
6+
String[] strs = S.split("\\s+");
7+
for (int i = 0; i < strs.length; i++) {
8+
if (vowels.contains(Character.toLowerCase(strs[i].charAt(0)))) {
9+
sb.append(strs[i]);
10+
}
11+
else {
12+
sb.append(strs[i].substring(1)).append(strs[i].charAt(0));
13+
}
14+
sb.append("ma").append(addAString.toString()).append(" ");
15+
addAString.append("a");
2216
}
17+
return sb.toString().trim();
18+
}
2319
}
24-

Easy/Monotonic Array.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
class Solution {
2-
public boolean isMonotonic(int[] A) {
3-
if (A.length <= 2) return true;
4-
boolean pattern = A[A.length-1] > A[0] ? true : false;
5-
6-
for (int i=1; i<A.length; i++) {
7-
if (A[i] < A[i-1] && pattern == true) {
8-
return false;
9-
}
10-
if (A[i] > A[i-1] && pattern == false) {
11-
return false;
12-
}
13-
}
14-
return true;
2+
public boolean isMonotonic(int[] A) {
3+
if (A.length <= 1) {
4+
return true;
155
}
6+
int dir = 0;
7+
int idx = 0;
8+
while (idx < A.length - 1 && dir == 0) {
9+
dir = getDir(A, idx);
10+
idx++;
11+
}
12+
while (idx < A.length - 1) {
13+
int tempDir = getDir(A, idx);
14+
if (tempDir != 0 && tempDir != dir) {
15+
return false;
16+
}
17+
idx++;
18+
}
19+
return true;
20+
}
21+
22+
private int getDir(int[] A, int idx) {
23+
return A[idx] < A[idx + 1] ? -1 : (A[idx] > A[idx + 1] ? 1 : 0);
24+
}
1625
}
Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,30 @@
11
class Solution {
2-
public boolean isAlienSorted(String[] words, String order) {
3-
Map<Character, Integer> orderMap = new HashMap<>();
4-
for (int i=0; i<order.length(); i++) {
5-
orderMap.put(order.charAt(i), i);
6-
}
7-
8-
String prev = null;
9-
10-
for (String word : words) {
11-
if (prev == null) {
12-
prev = word;
13-
continue;
14-
}
15-
16-
for (int i=0; i<Math.min(prev.length(), word.length()); i++) {
17-
if (orderMap.get(word.charAt(i)) > orderMap.get(prev.charAt(i))) {
18-
break;
19-
}
20-
else if (orderMap.get(word.charAt(i)) < orderMap.get(prev.charAt(i))) {
21-
return false;
22-
}
23-
else if (word.length() != prev.length() && i == word.length() - 1) {
24-
return false;
25-
}
26-
}
27-
28-
prev = word;
29-
}
30-
2+
public boolean isAlienSorted(String[] words, String order) {
3+
Map<Character, Integer> map = new HashMap<>();
4+
for (int i = 0; i < order.length(); i++) {
5+
map.put(order.charAt(i), i);
6+
}
7+
for (int i = 0; i < words.length - 1; i++) {
8+
if (!verifyHelper(words[i], words[i + 1], map)) {
9+
return false;
10+
}
11+
}
12+
return true;
13+
}
14+
15+
private boolean verifyHelper(String s1, String s2, Map<Character, Integer> map) {
16+
int idx1 = 0;
17+
int idx2 = 0;
18+
while (idx1 < s1.length() && idx2 < s2.length()) {
19+
if (map.get(s1.charAt(idx1)) < map.get(s2.charAt(idx2))) {
3120
return true;
21+
}
22+
if (map.get(s1.charAt(idx1)) > map.get(s2.charAt(idx2))) {
23+
return false;
24+
}
25+
idx1++;
26+
idx2++;
3227
}
28+
return s1.length() <= s2.length();
29+
}
3330
}

0 commit comments

Comments
 (0)