/* * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */ public class Lc4 { /* * ·1:确定俩个数组总个数是奇数还是偶数,为了确定中位数计算方式 ·2:找到中位数的位置 */ public static double findMedianSortedArrays(int[] nums1, int[] nums2) { // ·确定俩个数组总个数是奇数还是偶数 boolean isEven = false; int sum = nums1.length + nums2.length; if ((sum) % 2 == 0) { isEven = true; } // ·合并俩个数组并进行排序 int[] nums = new int[sum]; for (int i = 0; i < nums1.length; i++) { nums[i] = nums1[i]; } for (int i = 0; i < nums2.length; i++) { nums[nums1.length + i] = nums2[i]; } shellSort(nums); // ·偶数 if (isEven) { int x = sum / 2 - 1; int y = x + 1; return (double) (nums[x] + nums[y]) / 2; // ·奇数 } else { int x = sum / 2 + 1 - 1; return (double) nums[x]; } } // ·希尔排序: 在直接插入排序的基础上增加控制增量,逻辑上将数组分组,轮流对每一个数组排序 //nlong(n) public static int[] shellSort(int[] nums) { for (int gap = nums.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < nums.length; i++) { for (int j = i; j >= gap && nums[j] < nums[j - gap]; j -= gap) { int temp = nums[j]; nums[j] = nums[j - gap]; nums[j - gap] = temp; } } } return nums; } public static void main(String[] args) { int[] nums1 = { 1, 2 }; int[] nums2 = { 3, 4 }; System.out.println(findMedianSortedArrays(nums1, nums2)); System.out.println(); // // int[] nums = { 1, 2, 4, 5, 3 }; // System.out.println(shellSort(nums)); // System.out.println(); } }
Lc4-寻找两个有序数组的中位数
原创
©著作权归作者所有:来自51CTO博客作者小傻孩丶的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Lc5-最长回文子串
下一篇:Lc3-无重复字符的最长子串
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
寻找两个有序数组的中位数
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
数组 时间复杂度 二分查找 中位数 空间复杂度 -
LeetCode——4. 寻找两个有序数组的中位数
力扣链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/给定两个大小为 m 和 =
LeetCode 寻找两个有序数组的中位数 中位数 有序数组 #include -
LC004-寻找两个正序数组的中位数
寻找两个正序数组的中位数难度困难3335给定两个大小为 m 和
算法 leetcode 数据结构 java 数组 -
4_寻找两个正序数组的中位数
4_寻找两个正序数组的中位数 package 数组; import java.lang.reflect.Array; import java.util.ArrayList
4_寻找两个正序数组的中位数 数组 中位数 java -
java split循环字符串遇到括号
作者:Hollis 本文,也是对于Java中字符串相关知识的一个补充,主要来介绍一下字符串拼接相关的知识。本文基于jdk1.8.0_181。 一、字符串拼接 字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起。我们都知道,String是Java中一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。这样设
java split循环字符串遇到括号 java 字符串拼接 java 字符串数组 java 数组拼接 java中stringbuffer