Skip to content

Commit 4a2da8f

Browse files
committed
fd
1 parent 8493a3d commit 4a2da8f

File tree

2 files changed

+30
-57
lines changed

2 files changed

+30
-57
lines changed

leetcode/solution/src/MedianOfTwoSortedArrays.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ private double findKth(int[] nums1, int start1, int end1, int[] nums2, int start
2424
if (len1 > len2) {
2525
return findKth(nums2, start2, end2, nums1, start1, end1, k);
2626
} else if (len1 == 0) {
27-
return nums2[k - 1];
27+
return nums2[start2 + k - 1];
2828
} else if (k == 1) {
2929
return Math.min(nums1[start1], nums2[start2]);
3030
}

leetcode/src/Main.java

Lines changed: 29 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,69 +2,42 @@
22

33
public class Main {
44

5-
class LRUCache {
6-
7-
class Node {
8-
Node prev, next;
9-
int key, val;
10-
11-
Node(int key, int val) {
12-
this.key = key;
13-
this.val = val;
14-
prev = next = this;
15-
}
16-
17-
void remove() {
18-
prev.next = next;
19-
next.prev = prev;
20-
}
21-
22-
void add(Node head) {
23-
next = head.next;
24-
head.next.prev = this;
25-
prev = head;
26-
head.next = this;
27-
}
5+
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
6+
int len1 = nums1.length;
7+
int len2 = nums2.length;
8+
int total = len1 + len2;
9+
if (total % 2 == 0) {
10+
return (findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2) +
11+
findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2 + 1))/2.0f;
12+
} else {
13+
return findKth(nums1, nums2, 0, len1 - 1, 0, len2 - 1, total/2 + 1);
2814
}
15+
}
2916

30-
private Node mHead;
31-
private HashMap<Integer, Node> mMap;
32-
private int mCapacity;
33-
34-
public LRUCache(int capacity) {
35-
mMap = new HashMap<>();
36-
mCapacity = capacity;
37-
mHead = new Node(0, 0);
17+
public double findKth(int[] nums1, int[] nums2, int start1, int end1, int start2, int end2, int k) {
18+
int len1 = end1 - start1 + 1;
19+
int len2 = end2 - start2 + 1;
20+
if (len1 > len2) {
21+
return findKth(nums2, nums1, start2, end2, start1, end1, k);
3822
}
39-
40-
public int get(int key) {
41-
if (!mMap.containsKey(key)) {
42-
return -1;
43-
}
44-
Node node = mMap.get(key);
45-
node.remove();
46-
node.add(mHead);
47-
return node.val;
23+
if (len1 == 0) {
24+
return nums2[start2 + k - 1];
4825
}
49-
50-
public void put(int key, int value) {
51-
Node node = mMap.get(key);
52-
if (node == null) {
53-
node = new Node(key, value);
54-
mMap.put(key, node);
55-
} else {
56-
node.val = value;
57-
node.remove();
58-
}
59-
node.add(mHead);
60-
if (mMap.size() > mCapacity) {
61-
Node prev = mHead.prev;
62-
prev.remove();
63-
mMap.remove(prev.key);
64-
}
26+
if (k == 1) {
27+
return Math.min(nums1[start1], nums2[start2]);
28+
}
29+
int ia = Math.min(k/2, len1);
30+
int ib = k - ia;
31+
if (nums1[start1 + ia - 1] > nums2[start2 + ib - 1]) {
32+
return findKth(nums1, nums2, start1, end1, start2 + ib, end2, k - ib);
33+
} else if (nums1[start1 + ia - 1] < nums2[start2 + ib - 1]) {
34+
return findKth(nums1, nums2, start1 + ia, end1, start2, end2, k - ia);
35+
} else {
36+
return nums1[start1 + ia - 1];
6537
}
6638
}
6739

40+
6841
public static void main(String[] args) {
6942

7043
}

0 commit comments

Comments
 (0)