[分治][动态规划]数组中的第K个最大元素,不同的二叉树

Posted 明月清辉入梦来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[分治][动态规划]数组中的第K个最大元素,不同的二叉树相关的知识,希望对你有一定的参考价值。

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2

输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4

输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

题解:

class Solution {public:  //minhead /* int findKthLargest(vector<int>& nums, int k) { priority_queue<int,vector<int>,greater<int>> p; //priority_queue<int,vector<int>,less<int>> p; for(auto i=0;i<nums.size();++i){ p.emplace(nums[i]); if(i>k-1){ p.pop(); } } return p.top(); }    */    //分而治之 int findKthLargest(vector<int>&nums,int k){ return getIndex(nums,0,nums.size()-1,k); } int getIndex(vector<int>&nums,int Low,int High,int k){ int temp=nums[Low]; int low=Low; int high=High; while(low<high){ while(high>low&&nums[high]>=temp){ --high; } nums[low]=nums[high]; while(high>low&& nums[low]<=temp){ ++low; } nums[high]=nums[low]; } nums[low]=temp; if(low==nums.size()-k)return nums[low]; if(low<nums.size()-k){ return getIndex(nums,low+1,High,k); }else{ return getIndex(nums,Low,low-1,k); } }};

题目:

不同的搜索树

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?


示例:


输入: 3

输出: 5

解释:

给定 n = 3, 一共有 5 种不同结构的二叉搜索树:


   1         3     3      2      1

    \       /     /      / \      \

     3     2     1      1   3      2

    /     /       \                 \

   2     1         2                 3

题目解法:

给定一个有序序列 1 ... n,为了根据序列构建一棵二叉搜索树。我们可以遍历每个数字 i,将该数字作为树根,1 ... (i-1) 序列将成为左子树,(i+1) ... n 序列将成为右子树。于是,我们可以递归地从子序列构建子树。

在上述方法中,由于根各自不同,每棵二叉树都保证是独特的。


class Solution {public: //动态规划 // G(n): 长度为n的序列的不同二叉搜索树个数。 //F(i,n): 以i为根的不同二叉搜索树个数(1≤i≤n) //F(i,n)=G(i-1)*G(n-i) //所以G(n)=∑F(i,n) (i=1...n) int numTrees(int n) { if(n<=1)return 1; vector<int> dp(n+1,0); dp[0]=1; dp[1]=1; for(int i=2;i<=n;++i){ for(int j=1;j<=i;++j){ dp[i]+=dp[j-1]*dp[i-j]; } } return dp[n];  }};


以上是关于[分治][动态规划]数组中的第K个最大元素,不同的二叉树的主要内容,如果未能解决你的问题,请参考以下文章

快排查找数组中的第K个最大元素

215. 数组中的第K个最大元素

最大子数组-经典动态规划+分治算法

215. 数组中的第K个最大元素

LeetCode:数组中的第K个最大元素215

[leetcode]215. 数组中的第K个最大元素