Skip to content

Commit 7f4f94d

Browse files
committed
Added 3 medium solutions to sorting
1 parent 00d4878 commit 7f4f94d

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed

Medium/3Sum.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution {
2+
public List<List<Integer>> threeSum(int[] nums) {
3+
Set<List<Integer>> set = new HashSet<>();
4+
Arrays.sort(nums);
5+
for (int i=0; i<nums.length; i++) {
6+
for (int j=i+1; j<nums.length; j++) {
7+
int target = -1 * (nums[i] + nums[j]);
8+
9+
int idx = findBinary(nums, j+1, nums.length-1, target);
10+
11+
if (idx != -1) {
12+
List<Integer> temp = new ArrayList<>();
13+
temp.add(nums[i]);
14+
temp.add(nums[j]);
15+
temp.add(nums[idx]);
16+
17+
set.add(temp);
18+
}
19+
}
20+
}
21+
22+
List<List<Integer>> ans = new ArrayList<>();
23+
ans.addAll(set);
24+
25+
return ans;
26+
}
27+
28+
private int findBinary(int[] nums, int start, int end, int target) {
29+
while (start <= end) {
30+
int mid = (start + end)/2;
31+
32+
if(nums[mid] == target) {
33+
return mid;
34+
}
35+
else if (nums[mid] > target) {
36+
end = mid-1;
37+
}
38+
else {
39+
start = mid + 1;
40+
}
41+
}
42+
43+
return -1;
44+
}
45+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
class Solution {
2+
public int[] searchRange(int[] nums, int target) {
3+
int idx = findBinary(nums, 0, nums.length-1, target);
4+
int startIdx = idx;
5+
int endIdx = idx;
6+
7+
int start = 0;
8+
int end = idx - 1;
9+
10+
while (true) {
11+
int temp = findBinary(nums, start, end, target);
12+
if (temp != -1) {
13+
startIdx = temp;
14+
start = 0;
15+
end = temp - 1;
16+
}
17+
else {
18+
break;
19+
}
20+
}
21+
22+
start = idx + 1;
23+
end = nums.length - 1;
24+
25+
while (true) {
26+
int temp = findBinary(nums, start, end, target);
27+
if (temp != -1) {
28+
endIdx = temp;
29+
start = temp + 1;
30+
end = nums.length - 1;
31+
}
32+
else {
33+
break;
34+
}
35+
}
36+
37+
int[] ans = new int[]{startIdx, endIdx};
38+
39+
return ans;
40+
}
41+
42+
private int findBinary(int[] nums, int start, int end, int target) {
43+
while (start <= end) {
44+
int mid = (start + end)/2;
45+
if (nums[mid] == target) {
46+
return mid;
47+
}
48+
else if (nums[mid] > target) {
49+
end = mid-1;
50+
}
51+
else {
52+
start = mid + 1;
53+
}
54+
}
55+
56+
return -1;
57+
}
58+
}

Medium/Merge Intervals.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* Definition for an interval.
3+
* public class Interval {
4+
* int start;
5+
* int end;
6+
* Interval() { start = 0; end = 0; }
7+
* Interval(int s, int e) { start = s; end = e; }
8+
* }
9+
*/
10+
class Solution {
11+
public static List<Interval> merge(List<Interval> intervals) {
12+
13+
if (intervals.size() == 1) {
14+
return intervals;
15+
}
16+
17+
List<Interval> ans = new ArrayList<>();
18+
if (intervals.size() == 0) {
19+
return ans;
20+
}
21+
22+
Collections.sort(intervals, new Comparator<Interval>() {
23+
@Override
24+
public int compare(Interval o1, Interval o2) {
25+
return o1.start - o2.start;
26+
}
27+
});
28+
29+
int i = 0;
30+
Interval prevInterval = null;
31+
32+
List<Interval> temp = new ArrayList<>(intervals);
33+
34+
for (Interval interval : temp) {
35+
if (i == 0) {
36+
prevInterval = interval;
37+
i++;
38+
continue;
39+
}
40+
41+
if (interval.start <= prevInterval.end) {
42+
if (interval.end >= prevInterval.end) {
43+
prevInterval.end = interval.end;
44+
}
45+
46+
intervals.remove(interval);
47+
}
48+
else {
49+
prevInterval = interval;
50+
}
51+
}
52+
53+
return intervals;
54+
}
55+
}

0 commit comments

Comments
 (0)