日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode: Median of Two Sorted Arrays 解题报告

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode: Median of Two Sorted Arrays 解题报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Median of Two Sorted Arrays

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

SOLTION 1:

1. 我們借用findKthNumber的思想。先實現findKthNumber,如果是偶數個,則把中間2個加起來平均,奇數就用中間的。

2. 為了達到LOG級的復雜度,我們可以這樣:

每次在A,B取前k/2個元素。有以下這些情況:

1).? A的元素個數?< k/2. 則我們可以丟棄B前k/2. 反之亦然

證明:

我們使用反證法。

假設第K大在B的前k/2中,例如位置在索引m(m <= k/2-1)那么A必然擁有前k中的k -(m+1)個元素,而

m <= k/2-1,則 m+1 <= k/2? , k - (m+1) >= k/2與條件:A的元素不夠k/2矛盾,所以假設不成立,得證。

舉個栗子:

A: 6 7 8

B: 1 2 3 4 5

找第8大的數字,

2). A[mid] < B[mid] (mid是k/2 -1索引處的元素)。

這種情況下,我們可以丟棄A前k/2。

證明:

我們使用反證法。

假設第K大在A的前k/2中記為maxK,例如位置在索引m(m <= k/2-1)那么B必然擁有前k中的k -(m+1)個元素,而

m <= k/2-1,則 m+1 <= k/2? , k - (m+1) > k/2

推出B[mid] <= maxK

而A[mid] >= maxK 推出 A[mid]>=B[mid], 與題設矛盾。所以假設不能成立。

舉個栗子:

A: 1 2

B: 4 5 6 7 8

找第四大的數字 我們就可以首先排除1,2.

1 public double findMedianSortedArrays(int A[], int B[]) { 2 if (A == null || B == null) { 3 return 0; 4 } 5 6 int len = A.length + B.length; 7 8 double ret = 0; 9 // 偶數個元素 10 if (len % 2 == 0) { 11 ret = (findKth(A, B, 0, 0, len / 2) + findKth(A, B, 0, 0, len / 2 + 1)) / (double)2.0; 12 } else { 13 // 奇數個元素 14 ret = findKth(A, B, 0, 0, len / 2 + 1); 15 } 16 17 return ret; 18 } 19 20 // Find the Kth large number. 21 public int findKth(int A[], int B[], int indexA, int indexB, int k) { 22 int lenA = A.length; 23 int lenB = B.length; 24 25 if (indexA >= lenA) { 26 return B[indexB + k - 1]; 27 } else if (indexB >= lenB) { 28 return A[indexA + k - 1]; 29 } 30 31 // Base Case, pay attention. 在這里必須要退出。因為k = 1的時候,不可能再分了。 32 if (k == 1) { 33 return Math.min(A[indexA], B[indexB]); 34 } 35 36 // -1是因為索引本身是從0開始的。而前k大元素含有k個元素。 37 int mid = k / 2 - 1; 38 39 // 注意,越界條件是 >= lenA. 怎么老是犯這個錯誤。。 40 int keyA = indexA + mid >= lenA ? Integer.MAX_VALUE: A[indexA + mid]; 41 int keyB = indexB + mid >= lenB ? Integer.MAX_VALUE: B[indexB + mid]; 42 43 // 因為丟棄了k / 2個元素 44 int kNew = k - k / 2; 45 46 if (keyA < keyB) { 47 return findKth(A, B, indexA + k / 2, indexB, kNew); 48 } else { 49 return findKth(A, B, indexA, indexB + k / 2, kNew); 50 } 51 } View Code

?2015.1.25

可以優化一下,在找到kth number時可以及時退出:

1 public class Solution { 2 public double findMedianSortedArrays(int A[], int B[]) { 3 //2257 4 if (A == null || B == null) { 5 return 0; 6 } 7 8 int len = A.length + B.length; 9 if (len % 2 == 0) { 10 return (double)(dfs(A, B, 0, 0, len / 2) + dfs(A, B, 0, 0, len / 2 + 1)) / 2.0; 11 } else { 12 return dfs(A, B, 0, 0, len / 2 + 1); 13 } 14 } 15 16 public double dfs1(int A[], int B[], int aStart, int bStart, int k) { 17 if (aStart >= A.length) { 18 return B[bStart + k - 1]; 19 } else if (bStart >= B.length) { 20 return A[aStart + k - 1]; 21 } 22 23 if (k == 1) { 24 return Math.min(A[aStart], B[bStart]); 25 } 26 27 // k = 4; 28 // mid = 1; 29 int mid = k / 2 - 1; 30 31 if (aStart + mid >= A.length) { 32 // drop the left side of B. 33 return dfs(A, B, aStart, bStart + k / 2, k - k / 2); 34 } else if (bStart + mid >= B.length) { 35 // drop the left side of A. 36 return dfs(A, B, aStart + k / 2, bStart, k - k / 2); 37 } else if (A[aStart + mid] > B[bStart + mid]) { 38 // drop the left side of B. 39 return dfs(A, B, aStart, bStart + k / 2, k - k / 2); 40 // 當2者相等,有2種情況: 41 // 1. 當k為偶數,則kth存在于任何一個結尾處,其實也是可以丟棄一半的。 42 // 2. 當k為奇數,則kth不存在于A,B的left side。也是可以丟棄任意一半。 43 //} else if (A[aStart + mid] < B[bStart + mid]) { 44 } else { 45 return dfs(A, B, aStart + k / 2, bStart, k - k / 2); 46 } 47 48 //return A[aStart + mid]; 49 } 50 51 public double dfs(int A[], int B[], int aStart, int bStart, int k) { 52 if (aStart >= A.length) { 53 return B[bStart + k - 1]; 54 } else if (bStart >= B.length) { 55 return A[aStart + k - 1]; 56 } 57 58 if (k == 1) { 59 return Math.min(A[aStart], B[bStart]); 60 } 61 62 // k = 4; 63 // mid = 1; 64 int mid = k / 2 - 1; 65 66 if (aStart + mid >= A.length) { 67 // drop the left side of B. 68 return dfs(A, B, aStart, bStart + k / 2, k - k / 2); 69 } else if (bStart + mid >= B.length) { 70 // drop the left side of A. 71 return dfs(A, B, aStart + k / 2, bStart, k - k / 2); 72 } else if (A[aStart + mid] > B[bStart + mid]) { 73 // drop the left side of B. 74 return dfs(A, B, aStart, bStart + k / 2, k - k / 2); 75 } else if (A[aStart + mid] < B[bStart + mid]) { 76 return dfs(A, B, aStart + k / 2, bStart, k - k / 2); 77 } else { 78 // drop the left side of A. 79 //return dfs(A, B, aStart + k / 2, bStart, k - k / 2); 80 if (k % 2 == 0){ 81 return A[aStart + mid]; 82 } 83 84 // can drop both sides. 85 return dfs(A, B, aStart + k / 2, bStart + k / 2, 1); 86 } 87 88 //return A[aStart + mid]; 89 } 90 } View Code

?

GITHUB:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/array/FindMedianSortedArrays.java

總結

以上是生活随笔為你收集整理的LeetCode: Median of Two Sorted Arrays 解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 撕开少妇裙子猛然进入 | 国产成人精品一二三区 | 成人av电影在线播放 | 亚洲av永久无码精品国产精品 | 成人快手免费看片 | 蜜臀尤物一区二区三区直播 | 日韩影视一区二区三区 | 高h大肚孕期孕妇play | 懂色av成人一区二区三区 | 草逼视频网 | 成人精品网 | 成全影视在线观看第8季 | 欧美日韩一区二区电影 | 人人色网| 国产乱码精品一区二区三区不卡 | 欧美 日韩 国产 成人 在线 91 | 国产精品丝袜黑色高跟鞋 | 天天做天天射 | 成人在线视频播放 | 51ⅴ精品国产91久久久久久 | 午夜天堂视频 | 欧美日韩高清在线 | 亚洲av无一区二区三区怡春院 | 猛1被调教成公厕尿便失禁网站 | 91久久国产综合久久91 | 国产肥熟 | 91激情网| 精品亚洲国产成av人片传媒 | 99久久亚洲精品日本无码 | 日本少妇一级片 | 大肉大捧一进一出好爽视频 | 久久亚洲综合国产精品99麻豆精品福利 | 91在线观看免费高清 | 夜夜精品视频 | 青青青国产精品一区二区 | 中文字幕一区二区久久人妻 | 青青青手机在线视频 | 日韩福利视频一区 | 蜜桃成熟时李丽珍国语 | 欧美xo影院| 精品一区二区三区免费毛片 | 免费在线观看高清影视网站 | 亚洲黄色片视频 | 亚洲国产日韩一区二区 | 久久久国产一区二区 | 内射一区二区 | 美女mm131爽爽爽免费动视频 | 韩日av片| 成人免费在线视频网站 | 亚洲a在线视频 | 国产3p在线播放 | 女人脱下裤子让男人桶 | 成人黄色一区二区三区 | 夜夜干天天操 | 青青视频网站 | 黄色的一级片 | 国产一区伦理 | xiuxiuavnet | 性欧美极品另类 | 亚洲成人xxx| 欧美午夜精品一区二区 | 国产精品视频一区二区在线观看 | 亚洲一区二区在线播放 | 一二三区av | 自拍亚洲欧美 | www.国产精品| 亚洲国内自拍 | 久久精品人妻一区二区 | 亚洲第一欧美 | 欧美高清二区 | 久久毛片 | 国产精品自产拍高潮在线观看 | 日韩免费淫片 | 日韩视频在线观看一区二区 | 无码人妻久久一区二区三区蜜桃 | av在线不卡一区 | 麻豆乱淫一区二区三区 | 国产精品乱码久久久 | 天堂а√在线中文在线 | www国产www | 欧美日韩一区二区在线播放 | 五月网站| 亚洲精品xxxxx | 久久久久久国产精品三级玉女聊斋 | 国产中文字幕在线免费观看 | 欧美午夜性| 国产成人一区在线观看 | 国产一区一区 | 少妇av一区二区三区无码 | 三级色网站 | 美女隐私无遮挡网站 | 免费网站av| 日韩精品免费在线视频 | 91午夜理伦私人影院 | 手机看片国产1024 | 中文字幕1区2区 | 都市激情 亚洲 | av免费大全 | 中文在线观看免费视频 |