- 博客(7)
- 收藏
- 关注
原创 LeetCode75:颜色分类
题目:给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。思路一:看到“原地”和“不能用sort”这两处时,我的第一个想法是用快速排序,直接原地给它排好。class Solution {public: void sortColors(vector<int>& num
2022-05-25 15:33:32
122
原创 LeetCode347:前K个高频元素 & LeetCode451:根据字符出现频率排序
题目:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。思路:桶排序:将数组分到有限数量的桶里,每个桶再个别排序(可以使用别的排序算法 或 以递归的方式继续使用桶排序进行排序)。这里使用了algorithm库的sort,自定义cmp函数从而对频次进行排序。知识点:①lambda表达式②vector构造class Solution {public: vector<int> topKFrequent
2022-05-25 14:23:58
116
原创 LeetCode4:寻找两个正序数组的中位数
题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。思路:①中位数分奇数和偶数两种情况考虑②不需要真的合并两个数组,只需要找到中位数就行③此解法的时间复杂度应该是O(min(m,n)),应该是没达到O(log(m+n))吧,但是有几次测试又很快,不懂class Solution {public: double findMedia..
2022-05-24 19:01:42
126
原创 LeetCode154:寻找旋转排序数组中的最小值
题目:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。给你一个可能存在重复元素
2022-05-24 16:48:54
237
原创 LeetCode680:验证回文字符串Ⅱ
题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 :输入: s = "aba"输出: true输入: s = "abca"输出: true输入: s = "abc"输出: false题解:使用双向指针,若当前两字符不相同,考虑删除left字符或right字符,使用substr(pos,len)。class Solution {public: bool validPalindrome(string s) { int left = 0,
2022-05-23 14:24:00
89
原创 LeetCode665:非递减数列
给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例一:2,3,3,2,4:true示例二:2,3,3,2,2:false示例三:2,3,4,2,4:false贪心的思路:让前面每个片段的最后一个数字尽可能小,从而使后面的数字更容易满足非递增
2022-04-25 15:58:08
1574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人