Skip to content

Commit d580a2b

Browse files
committed
Added 1 solution & modified 1 solution
1 parent 32207f5 commit d580a2b

File tree

2 files changed

+71
-23
lines changed

2 files changed

+71
-23
lines changed

Easy/Reformat The String.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution {
2+
public String reformat(String s) {
3+
List<Character> letters = new ArrayList<>();
4+
List<Character> digits = new ArrayList<>();
5+
for (char c : s.toCharArray()) {
6+
if (Character.isLetter(c)) {
7+
letters.add(c);
8+
}
9+
else {
10+
digits.add(c);
11+
}
12+
}
13+
if (Math.abs(letters.size() - digits.size()) > 1) {
14+
return "";
15+
}
16+
return letters.size() > digits.size() ? formPermutation(letters, digits) : formPermutation(digits, letters);
17+
}
18+
19+
private String formPermutation(List<Character> l1, List<Character> l2) {
20+
StringBuilder sb = new StringBuilder();
21+
int idx1 = 0;
22+
int idx2 = 0;
23+
boolean isL1 = true;
24+
while (idx1 < l1.size() && idx2 < l2.size()) {
25+
sb.append(isL1 ? l1.get(idx1++) : l2.get(idx2++));
26+
isL1 = !isL1;
27+
}
28+
if (idx1 < l1.size()) {
29+
sb.append(l1.get(idx1));
30+
}
31+
if (idx2 < l2.size()) {
32+
sb.append(l2.get(idx2));
33+
}
34+
return sb.toString();
35+
}
36+
}

Medium/Find K Closest Elements.java

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,41 @@
11
class Solution {
2-
public List<Integer> findClosestElements(int[] arr, int k, int x) {
3-
if (x <= arr[0]) {
4-
return Arrays.stream(arr).boxed().collect(Collectors.toList()).subList(0, k);
5-
}
6-
else if (x >= arr[arr.length - 1]) {
7-
return Arrays.stream(arr).boxed().collect(Collectors.toList()).subList(arr.length - k, arr.length);
2+
public List<Integer> findClosestElements(int[] arr, int k, int x) {
3+
if (k == 0 || arr.length == 0) {
4+
return new ArrayList<>();
5+
}
6+
int[] diffArr = new int[arr.length];
7+
int minDiff = Integer.MAX_VALUE;
8+
int minDiffIdx = -1;
9+
for (int i = 0; i < arr.length; i++) {
10+
diffArr[i] = Math.abs(arr[i] - x);
11+
if (minDiff > diffArr[i]) {
12+
minDiff = diffArr[i];
13+
minDiffIdx = i;
14+
}
15+
}
16+
int left = minDiffIdx - 1;
17+
int right = minDiffIdx + 1;
18+
List<Integer> list = new ArrayList<>();
19+
list.add(arr[minDiffIdx]);
20+
k--;
21+
while (k > 0) {
22+
if (left >= 0 && right < arr.length) {
23+
if (diffArr[left] <= diffArr[right]) {
24+
list.add(arr[left--]);
825
}
926
else {
10-
int idx = Arrays.binarySearch(arr, x);
11-
if (idx < 0) {
12-
idx = -idx - 1;
13-
}
14-
int low = Math.max(0, idx - k - 1);
15-
int high = Math.min(arr.length - 1, idx + k - 1);
16-
17-
while (high - low > k - 1) {
18-
if (low < 0 || (x - arr[low]) <= (arr[high] - x)) {
19-
high--;
20-
}
21-
else if ((high > arr.length - 1 || (x - arr[low]) > (arr[high] - x))) {
22-
low++;
23-
}
24-
}
25-
26-
return Arrays.stream(arr).boxed().collect(Collectors.toList()).subList(low, high + 1);
27+
list.add(arr[right++]);
2728
}
29+
}
30+
else if (left >= 0 && right == arr.length) {
31+
list.add(arr[left--]);
32+
}
33+
else {
34+
list.add(arr[right++]);
35+
}
36+
k--;
2837
}
38+
Collections.sort(list);
39+
return list;
40+
}
2941
}

0 commit comments

Comments
 (0)