果果1020

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

There are two sorted arrays nums1 and nums2 of size m and n respectively. 

 1 public class Solution {
 2     public double findMedianSortedArrays(int[] nums1, int[] nums2) {
 3         int total = nums1.length + nums2.length;
 4         if (total % 2 == 1) {
 5             return findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2 + 1);
 6         } else {
 7             return (findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2) + findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2 + 1)) * 1.0 / 2;
 8         }
 9     }
10     
11     private int findKth(int[] n1, int s1, int len1, int[] n2, int s2, int len2, int K) {
12         if (len1 > len2) {
13             return findKth(n2, s2, len2, n1, s1, len1, K);
14         }
15         if (len1 == 0) {
16             return n2[s2 + K - 1];
17         }
18         if (K == 1) {
19             return Math.min(n1[s1], n2[s2]);
20         }
21         int pa = Math.min(len1, K / 2);
22         int pb = K - pa;
23         if (n1[s1 + pa - 1] < n2[s2 + pb - 1]) {
24             return findKth(n1, s1 + pa, len1 - pa, n2, s2, len2, K - pa);
25         } else if (n1[s1 + pa - 1] > n2[s2 + pb - 1]) {
26             return findKth(n1, s1, len1, n2, s2 + pb, len2 - pb, pa);
27         } else {
28             return n1[s1 + pa - 1];
29         }
30     }
31 }

 

posted on 2017-01-02 12:21  果果1020  阅读(140)  评论(0)    收藏  举报