首页 > 其他分享 >leetcode第4题 如何求出两个有序数组的中位数

leetcode第4题 如何求出两个有序数组的中位数

时间:2024-12-06 14:11:09浏览次数:8  
标签:return helper int 中位数 len leetcode 数组 nums1 nums2

leetcode原题大意,给定两个升序排列的有序数组,例如 nums1=[1,2], nums2=[3,4]那么,这两个有序数组的所有数字的中位数为 (2+3)/2 = 1.5,现在要求以O(log(m+n))的时间复杂度。

func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
	length := len(nums1) + len(nums2)
	if length%2 != 0 {
		return float64(helper(nums1, nums2, (length+1)/2))
	} else {
		x := float64(helper(nums1, nums2, length/2))
		y := float64(helper(nums1, nums2, length/2+1))
		return (x + y) / 2
	}
}
func helper(nums1 []int, nums2 []int, k int) int {
	if len(nums1) == 0 {
		return nums2[k-1]
	}
	if len(nums2) == 0 {
		return nums1[k-1]
	}
	if k == 1 {
		return min(nums1[0], nums2[0])
	}
	countOne := min(k/2, len(nums1))
	maxOne := nums1[countOne-1]
	countTwo := min(k/2, len(nums2))
	maxTwo := nums2[countTwo-1]
	if maxOne < maxTwo {
		return helper(nums1[countOne:], nums2, k-countOne)
	} else {
		return helper(nums1, nums2[countTwo:], k-countTwo)
	}
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

标签:return,helper,int,中位数,len,leetcode,数组,nums1,nums2
From: https://www.cnblogs.com/larosa666/p/18590693

相关文章

  • C语言实验 二维数组
    时间:2024.12.6一、实验7-1矩阵运算代码 #include<stdio.h>intmain(){inta[20][20]={0};intn,i,j;intsum=0;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j])......
  • 2024/12/6 【哈希表】LeetCode1.两数之和 【√】
    解法1:暴力解法classSolution:deftwoSum(self,nums:List[int],target:int)->List[int]:foriinrange(len(nums)):des=target-nums[i]ifdesinnums:forjinrange(len(nums)):......
  • LeetCode LCR072[x的平方根]
    题目链接LeetCodeLCR072[x的平方根]详情实例提示题解思路一[暴力法]由于所求的是整型且是正符号整型,可以采取循环遍历的方式来求取平方根用for循环将i由0开始遍历循环体:求i的平方值当平方值小于指定值,此时循环继续退出循环的条件:当平方值为指定值时,返回......
  • leetcode 2056. 棋盘上有效移动组合的数目
    classSolution{private:  vector<vector<int>>RMove={{1,0},{-1,0},{0,1},{0,-1}};  vector<vector<int>>BMove={{1,1},{-1,-1},{-1,1},{1,-1}};public:  boolCheckMove(intsx,intsy,intx,inty,intstep,vector<vector......
  • leetcode2836 在传球游戏中最大化函数值
    n名玩家在玩传球游戏,编号为i的玩家固定会把球传给编号为r[i]的玩家,任选一名玩家开始传球,恰好传k次,得分为这k次传球内所有接触过球的玩家的编号之和,如果玩家多次触球,则累加多次。问从哪个玩家开始传,能获得最大总得分,求最大得分。1<=n<=1E5;0<=r[i]<n;1<=k<=1E10分析:与倍增法求l......
  • LeetCode102 二叉树的层序遍历
    LeetCode102二叉树的层序遍历题目链接:LeetCode102描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思路方法一:迭代方式--借助队列方法二:递归方式代码方法......
  • 11-数组
    11-数组一、数组的定义一组相同类型元素的集合,并且使用英文的,(逗号)隔开,这就是数组的创建及初始化。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ /*10个整型:1~10*/ intarr[10]={1,2,3,4,5,6,7,8,9,10}; /*不完全初始化,剩余的......
  • 05.数组概述
    Java内存堆​ 存放所有new出来的对象和数组​ 可以被所有的线程共享,不会存放别的对象引用栈​ 存放基本变量类型(会包含这个基本类型的具体数值)​ 引用对象的变量(会存放这个引用在堆里面的具体地址)方法区​ 可以被所有的线程共享​ 包含了所有的class和static变量数......
  • [面试题]在一个无序数组中,找到数字满足 该数字大于下标小于该数字的任何数 和 小于下
    即找出数组中左边比该数字小右边比该数字大的数思想:遍历一次数组,动态记录访问该下标时的最大值(正序)同理,可以记录访问该下标时的最小值(倒序)得出结论:两个数组相同的时候满足题目所给条件时间复杂度:O(sN)s为常数级若有数据可以hack掉,请在评论区告诉我TT#include<iostream......
  • LeetCode46:全排列
    原题地址:46.全排列-力扣(LeetCode)题目描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出:[[0,1],......