LeetCode Median of Two Sorted Arrays

2024-02-23 12:18

本文主要是介绍LeetCode Median of Two Sorted Arrays,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

题意:

就是给定两个数组,这两个数组已经排好序了,然后求这两个合并之后的数组的中位数。要求的时间复杂度为O(m+n)。我们可以发现,现在我们是不需要“排序”这么复杂的操作的,因为我们仅仅需要第k大的元素。我们可以用一个计数器,记录当前已经找到第m大的元素了。同时我们使用两个指针pA和pB,分别指向A和B数组的第一个元素。使用类似于merge sort的原理,如果数组A当前元素小,那么pA++,同时m++。如果数组B当前元素小,那么pB++,同时m++。最终当m等于k的时候,就得到了我们的答案——O(k)时间,O(1)空间。

public double findMedianSortedArrays(int[] nums1,int[] nums2){int l1 = nums1.length;int l2 = nums2.length;int median = 0;boolean odd = false;if((l1 + l2) % 2 != 0){odd = true;median = (l1 + l2) / 2;int i = 0;int j = 0;int k = 0;double medi = 0;while(i <= median){if(j < l1 && k < l2 && nums1[j] <= nums2[k]){if(i == median)medi = nums1[j];j++;}else if(j < l1 && k < l2 && nums1[j] > nums2[k]){if(i == median)medi = nums2[k];k++;}else if(j == l1 && k < l2){if(i == median)medi = nums2[k];k++;}else if(k == l2 && j < l1){if(i == median)medi = nums1[j];j++;}i++;}return medi;}else {median = (l1 + l2) / 2 - 1;int i = 0;int j = 0;int k = 0;int medi = 0;while(i <= median){if(j < l1 && k < l2 && nums1[j] <= nums2[k]){if(i == median)medi = nums1[j];j++;}else if(j < l1 && k < l2 && nums1[j] > nums2[k]){if(i == median)medi = nums2[k];k++;}else if(j == l1 && k < l2){if(i == median)medi = nums2[k];k++;}else if(k == l2 && j < l1){if(i == median)medi = nums1[j];j++;}i++;}double md = 0;if(j < l1 && k < l2 && nums1[j] <= nums2[k]){md = nums1[j];}else if(j < l1 && k < l2 && nums1[j] > nums2[k])md = nums2[k];else if(j == l1 && k <= l2)md = nums2[k];else if(j <= l1 && k == l2)md = nums1[j];return (medi + md) / 2;}}


这篇关于LeetCode Median of Two Sorted Arrays的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738602

相关文章

Python中的sort()和sorted()用法示例解析

《Python中的sort()和sorted()用法示例解析》本文给大家介绍Python中list.sort()和sorted()的使用区别,详细介绍其参数功能及Timsort排序算法特性,涵盖自适应... 目录一、list.sort()参数说明常用内置函数基本用法示例自定义函数示例lambda表达式示例o

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param