前言:
而今你们对“js 判断 数字”大概比较注意,咱们都需要分析一些“js 判断 数字”的相关知识。那么小编也在网络上收集了一些关于“js 判断 数字””的相关文章,希望兄弟们能喜欢,我们快快来学习一下吧!给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
import java.math.BigDecimal;class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int[] arr = new int[nums1.length + nums2.length]; for (int i = 0; i < nums1.length; i++) { arr[i] = nums1[i]; } for (int i = 0; i < nums2.length; i++) { arr[nums1.length + i] = nums2[i]; } lengthOfLongestSubstring(arr, 0, arr.length - 1); if (arr.length % 2 == 0) { return new BigDecimal((arr[arr.length / 2] + arr[arr.length / 2 - 1])).divide(new BigDecimal(2)).doubleValue(); } else { return Double.valueOf(arr[arr.length / 2]); } } public static void lengthOfLongestSubstring(int[] s, int low, int high) { int i, j, pivot, temp; if(low > high) { return; } i = low; j = high; // 随机选定一个数字,这里默认选择第一个 pivot = s[low]; while(i < j) { // 从最高位向左寻找小于pivot的数 while(s[j] >= pivot && i < j) { j--; } // 从最低位向右寻找大于pivot的数 while(s[i] <= pivot && i < j) { i++; } if(i < j) { temp = s[i]; s[i] = s[j]; s[j] = temp; } } //将基准数字和i与j碰头的数字交换 s[low] = s[i]; s[i] = pivot; //拆分的两个数组继续各自进行排序 lengthOfLongestSubstring(s, low, i - 1); lengthOfLongestSubstring(s, i + 1, high); }}
这里完全按照常用逻辑,合并后再使用快速排序。
但是大拿们绝对有更好的方案,我也会继续研究。
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #js 判断 数字