首页 > 其他分享 >力扣-4-寻找两个正序数组的中位数

力扣-4-寻找两个正序数组的中位数

时间:2022-10-27 15:47:34浏览次数:65  
标签:count 正序 ++ 中位数 else 力扣 int 数组 nums2

中位数的定义是什么?有序数列中位置中间的数字
如果中间位置有两个返回则他们的平均值,所以这里的返回值是个double
要求时间复杂度为log(m+n),也就是说只对两个数组做一次遍历,可以使用额外的空间,但是不能做额外的扫描
我想到了快速插入排序

扫描两个数组并做快速插入排序,但是其实我并不需要保存结果,我只需要保存我想要的数就行
原理是快排每一次划分得到的基准的索引在后面的排序过程中是不变的

注意到这里给出的两个数组都是正序的,那得用上

double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {

	double res;

	int m = nums1.size(), n = nums2.size();
	int count = (m + n) / 2;
	int i = 0, j = 0;
	while (count) {
		if (i < m && j < n) {
			if (nums1[i] > nums2[j]) j++;
			else i++;
		}
		// 考虑一个数组遍历完了,另一个数组很长的情况
		else if (i < m) {
			i++;
		}
		else j++;
		count--;
	}

	cout << i << j << endl;


	// 算出我想要得到的数字的索引
	if ((m + n) & 1) {
		// 长度为奇数,中位数只有1个
		if (i < m && j < n) res = max(nums1[i], nums2[j]);
		else if (i < m) res = nums1[i];
		else res = nums2[j];
	}
	else {
		// 长度为偶数,中位数两个
		if (i < m && j < n) {
			// 当前两个指向中较大的那个,加上它的下一个
		}
		else if (i < m) res = (nums1[i]+nums1[i+1])/2;
		else res = (nums2[j]+nums2[j+1])/2;
	}
	return res;
}

不行,感觉思路乱了,代码也很不好看

标签:count,正序,++,中位数,else,力扣,int,数组,nums2
From: https://www.cnblogs.com/yaocy/p/16832432.html

相关文章

  • 力扣 107. 二叉树的层序遍历 II
    107.二叉树的层序遍历II给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例1:输入:r......
  • 力扣-92-反转链表Ⅱ
    其实对链表的考察就是考察指针,不喜欢Java写算法题的一大原因就是Java没有指针区间反转链表,相对于整体反转链表而言回忆一下链表的整体反转,大概是两种做法递归,从后往前......
  • 整理一些关于树的力扣热门算法操作
    一、LC94、144、145中序,前序,后续遍历List<Integer>front=newArrayList<>();List<Integer>mid=newArrayList<>();List<Integer>back=newArrayList<>();......
  • 力扣455(java&python)-分发饼干(简单)
    题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;......
  • 力扣182(java&python)-数组元素积的符号(简单)
    题目:已知函数 signFunc(x)将会根据x的正负返回特定值:如果x是正数,返回1。如果x是负数,返回-1。如果x是等于0,返回0。给你一个整数数组nums。令product......
  • 寻找两个正序数组的中位数
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例......
  • 力扣561(java&python)-数组拆分(简单)
    题目:给定长度为 2n 的整数数组nums,你的任务是将这些数分成 n对,例如(a1,b1),(a2,b2),...,(an,bn),使得从1到 n的min(ai,bi)总和最大。返回该最大......
  • 力扣122(java&python)-买卖股票的最佳时机 II(中等)
    题目:给你一个整数数组prices,其中 prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有一股股票。你也......
  • 力扣(LeetCode) - 好友推荐
    一.题目表:Listens这个表没有主键,可能存在重复项表中的每一行表示用户user_id在day这一天收听的歌曲song_id+-------------+---------+|ColumnName|Type......
  • 剑指 Offer 37. 序列化二叉树 - 力扣(LeetCode)
    剑指Offer37.序列化二叉树-力扣(LeetCode)题目大意:将一棵二叉树序列化成字符串,然后通过该字符串可以重新构造出二叉树思路:看到将二叉树转化成字符串,首先想到的......