• 215. Kth Largest Element in an Array


    • O(NlogN)的时间复杂度+O(1)的空间复杂度

    思路:先排序,然后输出第k大的元素即可,排序的时间复杂度是O(NlogN),输出第k大元素的时间复杂度为O(1)

    class Solution
    {
    public:
    	int findKthLargest(vector<int>& nums, int k)
    	{
    		sort(nums.begin(), nums.end(), std::greater<>{});
    		return nums[k - 1];
    	}
    };
    
    • Quick Sort 的思想

    代码实现:

    class Solution
    {
    public:
    	int findKthLargest(vector<int>& nums, int k)
    	{
    		int left = 0;
    		int right = nums.size() - 1;
    
    		while (true)
    		{
    			int pos = partition(nums, left, right);  //pos是Pivot在nums中的位置
    			if (pos == k - 1)
    			{
    				return nums[pos];
    			}
    			else if (pos > k - 1)
    			{
    				right = pos - 1;
    			}
    			else
    			{
    				left = pos + 1;
    			}
    			//else if (pos > k - 1)
    			//{
    			//	//更新左边
    			//	/*left = pos + 1;*/
    			//	right = pos - 1;
    			//}
    			//else  //nums[pos] < nums[k - 1]
    			//{
    			//	//更新右边
    			//	/*right = pos - 1;*/
    			//	left = pos + 1;
    			//}
    		}
    	}
    private:
    	int partition(vector<int>& nums, int left, int right)
    	{
    		int pivot = nums[left];  //选最左边一个元素作为pivot
    		
    		int l = left + 1;
    		int r = right;
    
    		while (l <= r)
    		{
    			if (nums[l] < pivot && nums[r] > pivot)
    			{
    				std::swap(nums[l],nums[r]);
    				l++;
    				r--;
    			}
    			if (nums[l] >= pivot)
    			{
    				l++;
    			}
    			if (nums[r] <= pivot)
    			{
    				r--;
    			}
    		}
    
    		std::swap(nums[left],nums[r]);
    		return r;
    	}
    };
    

    看了第二个方法,我觉得我可能学了一个假的快排,不,我根本就没学过快排。

  • 相关阅读:
    mytest3.py-api接入平台获取数据
    对比python的进程和线程:多线程是假的
    bug-sqlite3
    安装python3 centos
    句式英语
    java组件学习15天
    areas表-省市区
    中转复制
    追踪路由的2种方法
    干掉头疼的finished with non-zero exit value 2
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/12031595.html
Copyright © 2020-2023  润新知