[C#][LeetCode][4. Median of Two Sorted Arrays]

自認程式的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的值

這樣就能取得中位數啦…

但是

其實只要直接對兩陣列進行矩陣運算就可以了,可惜我頭腦不好,只能用這種直觀傻子做法,待未來腦子好一點後再來改進…

這個數據…好吧還要再努力了

單純筆記,皆為非正規作法,旁門左道,胡搞瞎搞。