记录我的弱智做法- -
思路在于不停的去判断,给出的两个有序数组,有序这一条件我没用到,我的做法是两个数组先合一,比如[1,2],[2,3],会合并为[1,2,2,3],之后给该数组排序,然后利用Set将重复元素给去掉,再重新赋值给新的数组,理论上应该是再排序一次,set内不是有序的,最后判断奇偶性,求出一个数组的平均值就简单了吧,注意判断数组长度是否为空,以及数组不要越界,检查起来还是比较繁琐的,我的思路不好,写法有点笨了,需要借鉴一哈答案。
修改版,前边错了,原因是没注意数组下标是从0开始的,但是还是提交失败,[1,1],[1,2],结果为啥能是1,中间值难道不是1跟2之间的,可能是我理解错误,以后看到再修改吧。
public static double findMedianSortedArrays(int[] nums1, int[] nums2) { if (nums1.length > 0 && nums2.length > 0) { double ans = 0; int len1 = nums1.length; int len2 = nums2.length; int len = nums1.length + nums2.length; int[] numbers = new int[len]; if (len1 == 1 && len2 == 1) { ans = (double) (nums1[0] + nums2[0]) / 2; return ans; } else { for (int i = 0; i < len1; i++) { numbers[i] = nums1[i]; } for (int i = 0; i < len2; i++) { numbers[i + len1] = nums2[i]; } for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (numbers[i] > numbers[j]) { int number = 0; number = numbers[j]; numbers[j] = numbers[i]; numbers[i] = number; } } } Map<Integer, Integer> maps = new HashMap<>(); for (int i = 0; i < len; i++) { maps.put(i, numbers[i]); } Set<Integer> values = new HashSet<Integer>(maps.values()); Iterator iter = values.iterator(); int[] numbers1 = new int[values.size()]; for (int i = 0; i < numbers1.length; i++) { numbers1[i] = (int) iter.next(); } len = numbers1.length; if (len > 1) { for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (numbers1[i] > numbers1[j]) { int number = 0; number = numbers1[j]; numbers1[j] = numbers1[i]; numbers1[i] = number; } } } } if (len % 2 == 0) { if (len == 2) { ans = (double) (numbers1[0] + numbers1[1]) / 2; } else { ans = (double) (numbers1[len / 2 - 1] + numbers1[len / 2]) / 2; } } else { if (len == 1) { ans = numbers1[0]; } else { int num = (len + 1) / 2; ans = (double) numbers1[num - 1]; } } return ans; } } else if (nums1.length == 0 && nums2.length > 0) { int len = nums2.length; double ans = 0; if (len == 1) { ans = nums2[len - 1]; return ans; } else if (len == 2) { ans = (double) (nums2[0] + nums2[1]) / 2; return ans; } else { if (len % 2 == 0) { ans = (double) (nums2[len / 2 - 1] + nums2[len / 2]) / 2; } else { int num = (len + 1) / 2; ans = (double) nums2[num - 1]; } return ans; } } else if (nums1.length > 0 && nums2.length == 0) { int len = nums1.length; double ans = 0; if (len == 1) { ans = nums1[len - 1]; return ans; } else if (len == 2) { ans = (double) (nums1[0] + nums1[1]) / 2; return ans; } else { if (len % 2 == 0) { ans = (double) (nums1[len / 2 - 1] + nums1[len / 2]) / 2; } else { int num = (len + 1) / 2; ans = (double) nums1[num-1]; } return ans; } } else { double ans = 0; return ans; }