LeetCode
MaxeeoveCR
DL && ML
展开
-
【L39】组合总和
描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。所有数字(包括 target)都是正整数。解集不能包含重复的组合。例子:输入: candidates = [2,3,5], target = 8输出: [[2,2,2,2],[2,3,3],[3,5]]思路DFS+剪枝:先做排序,将大值优先搜索回溯模板void dfs(当原创 2021-12-21 13:05:01 · 171 阅读 · 0 评论 -
【L31】下一个排列
描述给定一个数组,例如[1,3,2],寻找下一个最小的大于当前数组组成的数字的数组,例如[2,1,3]思路双指针 + 从右向左找降序邻接对,“小数” + 从右向左找“大数” + 排序想法:从右向左如果为升序,那么无法找到更大组合,所以需要找到降序元素,再对降序元素的较小数跟较大数进行替换,才能得到更大组合1.从右向左寻找第一组邻接的降序对2.如果没有找到,翻转数组,返回;如果找到,降序对的首元素作为“小数”,记录“小数”下标3.从右向左寻找第一个比“小数”大的元素作为“大数”,记录“大数”下标原创 2021-10-26 11:24:43 · 61 阅读 · 0 评论 -
【L347】Top-K问题
描述【Leet code 347】给定一个数组,返回前K个出现次数最多的元素。思路1.构建哈希表(std::unordered_map)记录元素和出现次数2.构建优先队列(std::priority_queue)遍历哈希表入队3.优先队列出队k个元素复杂度时间:O(N*log(k))空间:O(N)代码(C++)/* 【L 347】Top-K 问题* 返回前K个元素*/class cmp_prt_queue{public: bool operator()(std::pa原创 2021-10-25 18:34:20 · 109 阅读 · 0 评论 -
【L】快排
思路递归,双指针每次迭代将一个基数的左侧元素都<基数,右侧元素都>基数递归函数:1.创建基数,创建start、end和left、right双指针循环直到left>=right 2.从末尾找第一个比基数小的元素作为right指针,再从首位找第一个比基数大的元素作为left指针 3.swap(left,right)4.swap(基数,left)5.基数左侧进行递归(start, left)6.基数右侧递归函数(left+1, end)复杂度时间:O(nlog(n))原创 2021-10-19 14:40:03 · 80 阅读 · 0 评论 -
【L】链表翻转
思路双指针法,就地翻转1. 创建left和right指针,指向待翻转的两元素;循环(直到right指针指向为nullptr): 2. left->next和right->next指向更新; 3. head和right指向后移;(每次迭代都是head和right指针指向更新,right指针指向不变)复杂度时间:O(N)空间:O(1)代码(C++)struct ListNode{ ListNode* next = 0; int val = 0; ListNode(int原创 2021-10-19 10:55:21 · 69 阅读 · 0 评论