LeetCode50题(17天)-Day14
215 数组中的第K大个元素
- 题号:215
- 难度:中等
- https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
在未排序的数组中找到第 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 ≤ 数组的长度
。
实现
思路:利用排序的方法
C# 语言
- 状态:通过
- 32 / 32 个通过测试用例
- 执行用时: 152 ms, 在所有 C# 提交中击败了 76.47% 的用户
- 内存消耗: 24.6 MB, 在所有 C# 提交中击败了 5.55% 的用户
public class Solution
{
public int FindKthLargest(int[] nums, int k)
{
nums = nums.OrderBy(a => a).ToArray();
return nums[nums.Length - k];
}
}
Python 语言
- 执行结果:通过
- 执行用时:40 ms, 在所有 Python3 提交中击败了 92.64% 的用户
- 内存消耗:14.4 MB, 在所有 Python3 提交中击败了 15.79% 的用户
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums.sort()
return nums[len(nums) - k]
217 存在重复元素
- 题号:217
- 难度:简单
- https://leetcode-cn.com/problems/contains-duplicate/
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 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
实现
思路:通过集合的方法
C# 语言
- 状态:通过
- 18 / 18 个通过测试用例
- 执行用时: 156 ms, 在所有 C# 提交中击败了 93.33% 的用户
- 内存消耗: 30.3 MB, 在所有 C# 提交中击败了 5.31% 的用户
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;
}
}
Python 语言
- 执行结果:通过
- 执行用时:48 ms, 在所有 Python3 提交中击败了 78.11% 的用户
- 内存消耗:18.9 MB, 在所有 Python3 提交中击败了 24.00% 的用户
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
if len(nums) < 2:
return False
h = set()
for num in nums:
if num in h:
return True
h.add(num)
return False
230 二叉搜索树中第K小元素
- 题号:230
- 难度:中等
- https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 3
进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?
实现
思路: 对二叉搜索树进行中序遍历,即可得到由小到大的序列。
- 状态:通过
- 91 / 91 个通过测试用例
- 执行用时: 128 ms, 在所有 C# 提交中击败了 100.00% 的用户
- 内存消耗: 27.2 MB, 在所有 C# 提交中击败了 9.09% 的用户
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
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);
}
}