题目:给两个已经排好序的数组,nums1和nums2,把两个数组合起来排好序输出排在中间的数,如果是偶数个数那就输出中间两个数的平均数,要求复杂度为O(log(m+n))
思路:感觉自己思路不对,但是不知道为什么这样做还A掉了。
开一个新数组,俩指针分别指向两个数组,从左往右遍历小的放进新数组里头。最后输出中间数即可。
但是这样做的话复杂度应该是O(m+n),今天头疼。。明天再写正确方法,下面这个是自己做的方法
import java.util.ArrayList;
import java.lang.Integer;
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
ArrayList<Integer> result = new ArrayList<Integer>();
int i=0;
int j=0;
while(i<nums1.length&&j<nums2.length){
if(nums1[i]<nums2[j]){
result.add(nums1[i]);
i++;
}else{
result.add(nums2[j]);
j++;
}
}
while(i<nums1.length){
result.add(nums1[i++]);
}
while(j<nums2.length){
result.add(nums2[j++]);
}
int size=result.size();
double result1;
if(size%2==0){
result1=((result.get(size/2).intValue())+(result.get(size/2-1).intValue()))/2.0;
}
else{
result1=(double)(result.get(size/2).intValue());
}
return result1;
}
}
收获:
1.数组长度直接这样获取即可:
num1.length
2.Java中的动态数组ArrayList在定义的时候不能直接在<>里写int、double等基本类型,需要写Integer、Double
3.ArrayList数组大小的获取用.size();方法即可