新手練習,學習進度剛到 IO
解題目的是為了訓練自己的思考模式還有熟悉度,肯定不是最佳解
題目:
Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
題目大意:提供2個陣列長度分別為m,n 然後回傳中間值
Example 1:如果新陣列長度為單數則回傳中間位置的值
Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.
Example 2:如果新陣列長度為雙數則回傳中間相鄰位置的平均
Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
思路
合併2個陣列,排序後找出中間位置
作法
1.合併2個陣列
這是另一個做法,全部用API解決
nums1=Arrays.copyOf(nums1,n1+n2);
System.arraycopy(nums2,0,nums1,n1,n2);
Arrays.sort(nums1);
2.nums1 ,nums2 的值按照大小依序放入
3.判斷newArr長度是奇數還是偶數
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n1=nums1.length;
int n2=nums2.length;
int[] newArr=new int[n1+n2];
int mid=newArr.length/2;
int i=0,j=0,n=0;
/**
* 將nums1 nums2 的值相比 較小的值先放數新陣列完成排序
*/
while(i<n1 && j<n2){
newArr[n++]=nums1[i]<nums2[j]?nums1[i++]:nums2[j++];
}
/**
* 如果nums1 的值還沒放完,把剩下的值放入新陣列
*/
while (i<n1){
newArr[n++]=nums1[i++];
}
/**
* 如果nums2 的值還沒放完,把剩下的值放入新陣列
*/
while (j<n2){
newArr[n++]=nums2[j++];
}
/**
* 如果新陣列長度是偶數 中間的2個位置數值平均
* 如果是奇數直接還回傳中間位置的值
*/
if(newArr.length%2==0){
return(double) (newArr[mid-1]+newArr[mid])/2;
}
return newArr[mid];
}
}
寫得不錯喔!雖然我看不太懂JAVA。
但,題目就算沒明說。給你一組以排序數列要找某值因該也可以猜到題目是要使用二分法解,這就像 我寫的範例33.Search in Rotated Sorted Array一樣,都是以有序數組為基礎的題目。至於這題的邊界,中值怎麼取。就是這題難的地方。要花時間想。改天有空我也來寫這題。
另外 我個人對API的定義是:
一個server在那可以讓調用者使用一些協定http tcp等...為調用者提供服務以及server的資源。我猜你調用的應該是JAVA的內置函數。也有可能是你有調用server幫你組合數組。當然api定義上也很廣。怎麼稱呼其實都可以看個人。