Leetcode题库 4.寻找两个正序数组的中位数(双指针法 C实现)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode题库 4.寻找两个正序数组的中位数(双指针法 C实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 解析
- 思路
- 代碼
解析
Median_0指向合并數組中位數之左
Median_1指向合并數組中位數之右
例1:[1,3,4],[2,5]
合并為[1,2,3,4,5]
Median_0=2(指向3)
Median_1=2(指向3)
例2:[1,4],[2,5]
合并為[1,2,4,5]
Median_0=1(指向2)
Median_1=2(指向4)
Temp0,Temp1分別用于存儲Median_0(中位數之左),Median_1(中位數之右)指向的數據
p指向當前已合并數組末尾一個元素的下標
p_0,p_1分別用于遍歷nums1,nums2
思路
模擬合并兩有序數組(合并有序數組)
合并過程中
當p=Median_0時,說明合并數組前一個插入值nums1[p_0-1]或者nums2[p_1-1]位于中位數之左,則將前一個插入值賦予Temp0
當p=Median_1時,說明合并數組前一個插入值nums1[p_0-1]或者nums2[p_1-1]位于中位數之右,則將前一個插入值賦予Temp1
并且由于Median_0<=Median_1,所以Temp0必然先于Temp1被搜尋到
于是,在Temp1被搜尋到之后,便可終止程序
代碼
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){int Median_0,Median_1,p=-1,p_0=0,p_1=0;int Temp=(nums1Size+nums2Size)%2;double Temp0,Temp1;if(Temp){Median_0=(nums1Size+nums2Size)/2+1;Median_1=Median_0;}else{Median_0=(nums1Size+nums2Size)/2;Median_1=Median_0+1;}Median_0--;Median_1--;while(p_0<nums1Size || p_1<nums2Size){if(p_0<nums1Size && p_1<nums2Size){if(nums1[p_0]<=nums2[p_1]){p_0++;p++;if(Median_0==p){Temp0=nums1[p_0-1];}if(Median_1==p){Temp1=nums1[p_0-1];break;}}else{p_1++;p++;if(Median_0==p){Temp0=nums2[p_1-1];}if(Median_1==p){Temp1=nums2[p_1-1];break;}}}else{if(p_0<nums1Size && p_1>=nums2Size){p_0++;p++;if(Median_0==p){Temp0=nums1[p_0-1];}if(Median_1==p){Temp1=nums1[p_0-1];break;}}else{p_1++;p++;if(Median_0==p){Temp0=nums2[p_1-1];}if(Median_1==p){Temp1=nums2[p_1-1];break;}}}}return (Temp0+Temp1)/2; }總結
以上是生活随笔為你收集整理的Leetcode题库 4.寻找两个正序数组的中位数(双指针法 C实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode题库 144.二叉树的前
- 下一篇: Leetcode题库 5.最长回文子串(