本文链接:
https://blog.csdn.net/qq_34811382/article/details/113188609
215. 数组中的第K个最大元素
思路:
用一下排序,返回数组的倒数第K个元素
手撕了一下快排
代码:
class Solution
{
public:
int findKthLargest(vector<int> &nums, int k)
{
QuickSort(nums, 0, nums.size());
return nums[nums.size() - k];
}
void QuickSort(vector<int> &nums, int left, int right)
{
if (left >= right)
return;
int i = left, j = right;
int base = nums[left]; //base就是基准点,以base为界限,小于base的放到左面,大于的放到右面。
while (i < j)
{
while (nums[j] >= base && i < j)
j--;
while (nums[i] <= base && i < j)
i++;
if (i < j)
swap(nums[i], nums[j]);
}
nums[left] = nums[i];
nums[i] = base;
QuickSort(nums, left, i - 1);
QuickSort(nums, i + 1, right);
}
};
217. 存在重复元素
思路:
将vector转化成set,如果两个元素数相同,就没有重复的,不相同就有重复的。
代码:
class Solution
{
public:
bool containsDuplicate(vector<int> &nums)
{
set<int> res(nums.begin(), nums.end());
if (nums.size() == res.size())
return false;
return true;
}
};
230. 二叉搜索树中第K小的元素
思路:
利用前序将二叉树的值存入一个数组,再将数组进行排序,从而找出第K小的元素。
代码:
class Solution
{
public:
int kthSmallest(TreeNode *root, int k)
{
vector<int> res;
StoreToArray(res, root);
sort(res.begin(), res.end());
return res[k - 1];
}
void StoreToArray(vector<int> &arr, TreeNode *root) //前序遍历
{
if (root == nullptr)
return;
arr.push_back(root->val);
StoreToArray(arr, root->left);
StoreToArray(arr, root->right);
}
};