龙空技术网

每日一算:力扣NO4.寻找两个正序数组的中位数

Hisschat 98

前言:

而今你们对“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 判断 数字