自認程式的Sense非常之差…只好玩玩LeetCode來磨練自己,沒想到…
沒想到就刷到這題難題啦!!!
https://leetcode.com/problems/median-of-two-sorted-arrays/
對於眾高手們來說應該是很簡單,但愚笨如我只會暴力解…當然解出來的效率就特別差,非常非常差
題目說明:
There are two sorted arrays nums1 and nums2 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)).
嘛…就是兩陣列取中位數
我的做法是先將兩陣列塞到一個List並且排序…(我相信很多人看到這句話就上一頁了)
public double FindMedianSortedArrays(int[] nums1, int[] nums2)
{
List<double> ans = new List<double>();
for (int i = 0; i < nums1.Length; i++)
{
ans.Add(nums1[i]);
}
for (int j = 0; j < nums2.Length; j++)
{
ans.Add(nums2[j]);
}
ans.Sort();
double A = GetMedian(ans);
return A;
}
再透過GetMedian來對List進行中位數判斷,參考前輩提供的資訊,文中關於中位數的判斷方式
稍微改寫一下…
http://einboch.pixnet.net/blog/post/255479588-%E5%88%A9%E7%94%A8c%23%E5%81%9A%E6%95%B8%E5%80%BC%E7%B5%B1%E8%A8%88%E5%88%86%E6%9E%90
private double GetMedian(List<double> aryData)
{
double _value = 0;
if (aryData.Count % 2 == 0)//數量為偶數
{
int _index = aryData.Count / 2;
double valLeft = Convert.ToDouble(aryData[_index - 1].ToString());
double valRight = Convert.ToDouble(aryData[_index].ToString());
_value = (valLeft + valRight) / 2;
}
else//數量為奇數
{
int _index = (aryData.Count + 1) / 2;
_value = double.Parse(aryData[_index - 1].ToString());
}
return _value;
}
先對List進行奇/偶數判斷
若為偶數,則取左右邊的值相加除以2,若為奇數,則先取得(N+1)/2的值,再對List取 (N+1)/2 -1的值
這樣就能取得中位數啦…
但是
其實只要直接對兩陣列進行矩陣運算就可以了,可惜我頭腦不好,只能用這種直觀傻子做法,待未來腦子好一點後再來改進…
這個數據…好吧還要再努力了
單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。