首页 > 其他分享 >带中位数写法的快速排序再讨论 & leetcode 215. Kth Largest Element in an Array题解

带中位数写法的快速排序再讨论 & leetcode 215. Kth Largest Element in an Array题解

时间:2024-10-13 22:22:50浏览次数:8  
标签:std 215 nums int 题解 make mid Element swap

带中位数写法的快速排序再讨论 & leetcode 215. Kth Largest Element in an Array题解

 

探讨带中位数的写法本身

class Solution {
public:
    int findKthLargest(std::vector<int>& nums, int k) {
        return fakeQuickSort(nums, k, 0, nums.size() - 1);
    }
private:
	int fakeQuickSort(std::vector<int>& nums, int k, int l, int r) {
		int x = find_pivot_down(nums, l, r);
		int i = l, j = r;
		while(i < j) {
			do i++; while(nums[i] > x);
			do j--; while(nums[j] < x);
			if(i < j) std::swap(nums[i], nums[j]);
		}
		std::swap(nums[i], nums[r]);
		if(r - l <= 2) {
			return nums[l + k - 1];
		}
		int cnt = i - l + 1;
		if(k < cnt) {
			return fakeQuickSort(nums, k, l, i);
		}
		else {
			return fakeQuickSort(nums, k - cnt, i + 1, r);
		}
	}
	int find_pivot_up(std::vector<int>& nums, int l, int r) {
		int mid = l + r + 1 >> 1;
		if(nums[mid] < nums[l])
			std::swap(nums[mid], nums[l]);	//	make sure nums[mid] >= nums[l]
		if(nums[l] > nums[r]) 
			std::swap(nums[l], nums[r]); //	make sure nums[l] <= nums[r]
		if(nums[mid] < nums[r])
			std::swap(nums[mid], nums[r]);	//	make sure nums[mid] >= nums[r]
		//	nums[l] <= nums[r] <= nums[mid]
		return nums[r];
	}
	int find_pivot_down(std::vector<int>& nums, int l, int r) {
		int mid = l + r + 1 >> 1;
		if(nums[l] < nums[mid])
			std::swap(nums[l], nums[mid]);	// make sure nums[l] >= nums[mid]
		if(nums[l] < nums[r])
			std::swap(nums[l], nums[r]);	// make sure nums[l] >= nums[r]
		if(nums[r] < nums[mid])
			std::swap(nums[r], nums[mid]);	// make sure nums[r] >= nums[mid]
		//	nums[mid] <= nums[r] <= nums[l]
		return nums[r];
	}
};

这里展示的是这道题的通过代码,不过本质上和放排序代码一样,偷个懒

 

标签:std,215,nums,int,题解,make,mid,Element,swap
From: https://www.cnblogs.com/smartljy/p/18463128

相关文章

  • ABC375 (A~G) 题解
    也是补完整场了。(虽然只有一题要补A模拟。B模拟。C模拟。D模拟。EE-3TeamDivision还想了蛮久的。题意:有三个队伍,各有一些人,人有能力值,人可以换队伍。问三个队伍能力值相同最少需要让多少人交换队伍。人数\(\le100\),值域\(\le1500\)题目还是挺误导人的,如......
  • koacms(十三)element ui 树形下拉选择封装
    直接上代码,这个用的地方也会比较多<!--*用法defaultValue:默认值treeData:树形数据disabled:是否禁用defaultProps:配置选项@clickSelectTree:点击树形节点时触发@clearSelectInput:清空输入框时触发<SelectTreev-model=......
  • [JLOI2015] 有意义的字符串 题解
    看到这个\(7\times10^{18}\)的模数已经可以摆烂了。不是,你告诉我这东西跟矩阵快速幂优化DP有关系??观察到这个题显然不能硬做,因为你显然不能直接算小数部分,而且还有个取模很难受。所以我们希望把一切的计算都基于整数。这个时候我们就要思考,有什么东西可以把根号转化为整数......
  • Codeforces Round 899 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1882A.IncreasingSequence从1开始慢慢和\(a[i]\)的所有值比较,注意最后一个位置特判下#include<iostream>#include<string.h>#include<map>#include<vector>#include<set>#include<unordered_set>#include<......
  • 带余除法题解
    题面带余除法题目背景注意:提交至洛谷时,请使用标准输入输出,而非文件输入输出。NOTICE:WhensubmittingyourcodeonLuogusite,pleaseusestandardIOinsteadoffileIO.点我(或在本题底部)下载中文试题PDF。Clickhere(oratthebottomofthispage)todownload......
  • Tarjan缩点题单 刷题题解
    Tarjan缩点可以将一个图的每个强连通分量缩成一个点,然后构建新图,该图就会变成一个有向无环图。变成有向无环图之后就能结合最短路,拓扑......解决相应题目洛谷题单分享:https://www.luogu.com.cn/training/526565前几道是绿题,没什么好写的,大致过一下1.强连通分量题目链接:https:......
  • 【算法题解记录】_1
    目录【算法题解记录】_1leetcode_115题【算法题解记录】_1还是干这个事了,要吃饭嘛,决定把在解题或者解完题进一步优化的时候,发现的有意思的地方记录一下leetcode_115题动态规划解的字符串匹配,矩阵全部都遍历,用时比较长,发现排在网友们的末尾纸上画了一下矩阵,行数代表被匹配串s......
  • 系统开发基础错题解析二【软考】
    目录前言1.人机界面设计2.架构设计2.1管道过滤器体系2.2仓库风格3.软件测试相关概念4.白盒测试用例4.14.25.测试分类与阶段任务划分6.软件维护类型7.软件质量保证8.软件过程改进前言本文专门用来记录本人在做软考中有关系统开发基础的错题,我始终认为教学相长是最快......
  • 数学题解报告
    TeamWork题意:求\(\sum_{i=1}^n\dbinom{n}{i}i^k\)\(n<=1e9,k<=5e3\)推式子\[\begin{aligned}记f_{n,k}&=\sum_{i=1}^n\dbinom{n}{i}i^k\\&=\sum_{i=1}^n\left[\dbinom{n-1}{i-1}+\dbinom{n-1}{i}\right]i^k\\&=\sum_{i=1}^n\d......
  • 神奇的幻方 NOIP 2015 题解
    描述幻方是一种很神奇的 N×N 矩阵:它由数字 1,2,3,⋯⋯,N×N 构成,且每行、每列及两条对角线上的数字之和都相同。当 N 为奇数时,我们可以通过下方法构建一个幻方:首先将 1 写在第一行的中间。之后,按如下方式从小到大依次填写每个数 K(K=2,3,⋯,N×N) :若 (K−1)......