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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数组越界怎么判断_算法连载之求解两个有序数组的中位数

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组越界怎么判断_算法连载之求解两个有序数组的中位数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題

給定兩個大小為 m 和 n 的有序數組 nums1 和 nums2。找出這兩個有序數組的中位數。假設 nums1 和 nums2 不會同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.

合并兩個有序數組來獲得中位數

1、先將兩個有序數組合并為一個有序數組

2、再獲取中位數

偶數情況中位數索引分別為:(m+n)/2-1,(m+n)/2。將二值求平均數。

計數情況中為數索引為:(m+n)/2

時間復雜度是O(m+n),空間復雜度是O(m+n)。

優化第一個求解方法

上一個算法是將兩個有序數組合并為一個有序數組再計算中位數位置。我們可以先計算中位數位置,將兩個有序數組元素逐一比較排序過程中,當索引位置到達中位數時停止。

時間復雜度是O((m+n)/2+1)=O(m+n),空間復雜度是((m+n)/2+1)=O(m+n)。

二分查找

  • 一個有序數組的中位數

長度為偶數:

數組a,索引位置初始為0,長度為m。索引 i 將有序數組劃分為左右兩個長度相等的部分,i = (m - 0) / 2 且必須滿足如下兩個條件:

1、length(a[0, i)) = length(a[i, m))

2、a[i-1] <= a[i]

則中位數是 (a[i-1] + a[i]) / 2

長度為基數:

數組a,索引位置初始為0,長度為m。索引 i 將有序數組劃分為左右兩個部分,其中左邊部分比右邊部分少一個元素,i = (m - 0) / 2 且必須滿足如下兩個條件:

1、length(a[0, i)) + 1 = length(a[i, m))

2、a[i-1] <= a[i]

則中位數是 a[i]

  • 兩個有序數組的中位數

兩個有序數組長度之和為偶數:

兩個a和b有序數組的長度分別是m和n。對a數組的一個劃分i和對b數組的一個劃分j,使得a數組的左半部分同b數組的左半部分看作合并后有序數組c的左半部分;而a數組的右半部分同b數組的右半部分看作合并后有序數組c的右半部分。假設有i、j存在,則需滿足如下條件:

1、length(a[0, i)) + length(b[0, j]) = length(a[i, m)) + length(b[j, n])

(i-0)+(j-0)=(m-i)+(n-j)

i=(m+n)/2-j

2、max(a[i-1], b[j-1]) <= min(a[i], b[j])

則中位數是 (max(a[i-1], b[j-1]) + min(a[i], b[j])) / 2

兩個有序數組長度之和為基數:

兩個a和b有序數組的長度分別是m和n。對a數組的一個劃分i和對b數組的一個劃分j,使得a數組的左半部分同b數組的左半部分看作合并后有序數組c的左半部分;而a數組的右半部分同b數組的右半部分看作合并后有序數組c的右半部分。假設有i、j存在,則需滿足如下條件:

1、length(a[0, i)) + length(b[0, j]) + 1 = length(a[i, m)) + length(b[j, n])

(i-0)+(j-0)+1=(m-i)+(n-j)

i=(m+n-1)/2-j

2、max(a[i-1], b[j-1]) <= min(a[i], b[j])

則中位數是 min(a[i], b[j])

分析求解:

兩個有序數組長度不管是基數還是偶數,都需要滿足如上兩個條件。其中第二個條件相同,而第一個條件我們可以歸納簡化為i=(m+n)/2-j,因為當m+n為基數時 (m+n)/2-j = (m+n-1)/2-j。所以,只要找出數組a劃分i,則可以通過公式i=(m+n)/2-j,得到數組b劃分j,并且滿足如下兩個條件:

1、i=(m+n)/2-j

2、max(a[i-1], b[j-1]) <= min(a[i], b[j])

我們可以在數組a中,通過折半查找來取得劃分i。其中IMIN為開始索引0,IMAX為數組a長度m

1)將數組a折半 i = (IMAX - IMIN) / 2

2)其中a[i-1]<=a[i],b[j-1]<=b[j]一定是成立的。

若b[j-1]>a[i]不符合條件,i只有向后移動一位變大,相應的j向前移動一位變小,才有可能符合條件b[j-1]<=a[i]。所以,此時的i并不是有效劃分,有效劃分在i+1~IMAX范圍內。IMIN賦值為i+1,繼續執行1)。

若a[i-1]>b[j]不符合條件,i只有向前移動一位變小,相應的j向后移動一位變大,才有可能符合條件a[i-1]<=b[j]。所以,此時的i并不是有效劃分,有效劃分在IMIN~i-1范圍內。IMAX為i-1,繼續執行1)。

3)最后找到合適的i和j,就可以直接計算得到中位數。

注意:

1、數組a和數組b長度的關系

必須保證0<=i<=m, 0<=j<=n;假設0<=i<=m成立,如果滿足0<=j<=n,m和n之間的關系。

1)

i=(m+n)/2-j =>

j=(m+n)/2-i =>

因為i<=m,所以j=(m+n)/2-i>=(m+n)/2-m=(n-m)/2 =>

若(n-m)/2>=0,則j>=0 =>

m<=n

2)

i=(m+n)/2-j =>

j=(m+n)/2-i =>

因為i>=0,j=(m+n)/2-i<=(m+n)/2 =>

若(m+n)/2<=n,則j<=n =>

m<=n

3)

總結:當m<=n時,0<=i<=m,可以保證0<=j<=n。所以,在算法中,始終要保持數組a的長度要不大于數組b的長度。

數組a可能為空數組

2、i,j移動過程中的越界問題

1)若b[j-1]>a[i]不符合條件,i只有向后移動一位變大,相應的j向前移動一位變小,才有可能符合條件b[j-1]<=a[i]。

為保證數組不越界,j不能等于0,i不能等于m。

這兩種情況要單獨判斷:

當j==0時,左半部分的最大值是a[i-1],右半部分的最小值是min(a[i], b[0]);

當i==m時,左半部分的最大值是max(a[m-1], b[j-1]),右半部分的最小值是b[j]。

2)若a[i-1]>b[j]不符合條件,i只有向前移動一位變小,相應的j向后移動一位變大,才有可能符合條件a[i-1]<=b[j]。所以,此時的i并不是有效劃分,有效劃分在0~i范圍內。IMIN賦值為0,IMAX為i,繼續執行1)。

為保證數組不越界,i不能等于0,j不能等于n。

這兩種情況要單獨判斷:

當i==0時,左半部分的最大值是b[j-1],右半部分的最小值是min(a[0], b[j]);

當j==n時,左半部分的最大值是max(a[i-1], b[n-1]),右半部分的最小值是a[i]。

時間復雜度是O(log(min(m,n))),空間復雜度是O(1)。

性能分析

隨機生成兩個有序數組進行性能測試:

The Median is 512203030.5 by MergedSortedArrays solve(num1.length=42385384,num2.length=19210176), using time is 349 milliseconds.

The Median is 512203030.5 by OptimizingMergedSortedArrays solve(num1.length=42385384,num2.length=19210176), using time is 195 milliseconds.

The Median is 512203030.5 by Binary solve(num1.length=42385384,num2.length=19210176), using time is 0 milliseconds.

二分查找法性能最優,符合預期。

總結

以上是生活随笔為你收集整理的数组越界怎么判断_算法连载之求解两个有序数组的中位数的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品乱码久久 | 熊猫成人网 | 天天爽影院 | 日韩欧美激情视频 | 天堂…中文在线最新版在线 | 黄色网在线看 | 久久综合五月 | 97色网| 亚洲一区中文字幕在线 | 亚洲免费在线观看视频 | 91国偷自产一区二区三区老熟女 | 亚洲国产精品视频在线观看 | 2019中文字幕在线视频 | 精品无码人妻少妇久久久久久 | 苏晴忘穿内裤坐公交车被揉到视频 | av香蕉| 午夜免费影院 | 久久爰| 国产一区二区不卡视频 | 一级做a爰| 免费看a的网站 | 青青青av| 精品综合久久久 | 无码人妻精品一区二区三区不卡 | 亚洲熟妇无码久久精品 | 亲嘴扒胸摸屁股激烈网站 | 国产精品视频一区二区三区不卡 | 天天操操 | 日韩有码在线观看 | 日韩成人欧美 | 日本一区二区免费高清视频 | 久久久精品小视频 | 黑人多p混交群体交乱 | 免费亚洲婷婷 | 性久久久久久久久久 | 欧美第一页在线 | 欧美草比视频 | av资源免费观看 | 特黄一级视频 | 18视频在线观看网站 | 亚洲视频精品在线 | 欧美日韩在线观看视频 | 成人短视频在线播放 | 老师张开让我了一夜av | 黑人巨茎大战欧美白妇 | 久久久久亚洲av无码专区 | 天堂网一区二区三区 | 哈利波特3在线观看免费版英文版 | 一级黄色免费 | 中文字幕成人av | 国产第一区第二区 | 曰批女人视频在线观看 | 亚洲欧美自拍另类 | 日韩中文字幕亚洲精品欧美 | 亚洲第一综合 | 日本一本在线视频 | 免费视频一区二区 | 无码h黄肉3d动漫在线观看 | 狠狠躁夜夜躁人爽 | 国内精品国产成人国产三级 | av爱爱爱| 已婚少妇美妙人妻系列 | 91喷水视频 | 一区在线观看视频 | 成人av网址大全 | 天天干精品 | 三年大片在线观看 | 欧美一区二区三区久久 | 一本色道久久亚洲综合精品蜜桃 | 亚洲av无码一区二区三区网站 | 亚洲永久视频 | 精品视频三区 | 国产激情第一页 | 又黄又爽又刺激的视频 | 一二三四区在线 | 国产成年人视频网站 | 丰满少妇熟乱xxxxx视频 | 午夜黄色一级片 | 国产另类在线 | 佐山爱在线视频 | 中文字幕在线观看一区二区 | 黄色三级三级三级三级 | 99ri视频| 精品一区二区在线免费观看 | 久草手机在线 | 国产精品天天av精麻传媒 | 黄网站在线观 | 中文字幕在线永久 | 一区二区三区在线视频免费观看 | 精品无码一区二区三区免费 | 欧美日韩免费 | 欧美 日韩 中文字幕 | 校园伸入裙底揉捏1v1h | 操亚洲女人 | 国产高潮久久 | 乌克兰少妇性做爰 | 三级av在线 | 欧美一区二区三区四区视频 | 国产精品自拍合集 |