第一题:数组中的第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 ≤ 数组的长度。
public class Solution
{
public int FindKthLargest(int[] nums, int k)
{
nums = nums.OrderBy(a => a).ToArray();
return nums[nums.Length - k];
}
}
第二题:存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
示例 1:
输入: [1,2,3,1]输出:true
示例 2:
输入: [1,2,3,4]输出:false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]输出:true
public class Solution
{
public bool ContainsDuplicate(int[] nums)
{
if (nums.Length < 2)
return false;
HashSet<int> h = new HashSet<int>();
foreach (int num in nums)
{
if (h.Contains(num))
return true;
h.Add(num);
}
return false;
}
}
第三题:二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k =13/ \14\2输出:1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k =35/ \36/ \24/1输出:3
public class Solution
{
List<int> _lst;
public int KthSmallest(TreeNode root, int k)
{
_lst=new List<int>();
MidTraver(root);
return _lst[k-1];
}
private void MidTraver(TreeNode current)
{
if(current==null)
return;
MidTraver(current.left);
_lst.Add(current.val);
MidTraver(current.right);
}
}