
Leetcode刷题
之前虽然刷过一些题目,但还是想做一个归类,系统地刷一下,提高一下自己的编程能力,为即将到来的研究生阶段做好准备
Aaron_1997
这个作者很懒,什么都没留下…
展开
-
回溯
普通的深度优先搜索(dfs)中,目的一般是寻找问题有没有解即可达性问题,当找到时就可退出递归。 而回溯适用于需要找出所有可能的解的情况,比如排列组合问题,例如有 { 'a','b','c' } 三个字符,求解所有由这三个字符排列得到的字符串,这种问题在执行到特定的位置返回之后还会继续执行求解过程。 因为 Backtracking 不是立即返回,而要继续求解,因此在程序实现时,需要注意对元素的标记问题: 在访问一个新元素进入新的递归调用时,需要将新元素标记为已经访问,这样才能在继续递归调用时不用重复访问原创 2020-09-17 16:36:54 · 155 阅读 · 0 评论 -
二分查找
1. x的平方根 难度:easy Leetcode题号:69 题目描述: 思路: 由于本人太菜,用不了牛顿迭代法(数学大佬们可以看看),故使用二分查找做的这道题,二分查找的初试左端点很好判断,取0就可以,初试右端点需要一定的考虑,我们可以解一个不等式:(a/2)^2>=a,解得a<=0或a>=4,故可以得出结论:大于等于4的整数的平方根都比它的二分之一要小,而本题中0,1,2,3的平方根分别是0,1,1,1,故可以判断一下x的值,只有当x>=4时才需要进行二分查找...原创 2020-08-04 22:36:24 · 267 阅读 · 0 评论 -
贪心思想
1. 分配饼干 难度:easy Leetcode题号:455 题目描述: 思路:贪心思想,即将饼干大小和孩子的胃口大小分别排序,将较小的饼干优先分配给胃口较小的孩子,这样才能用较大的饼干尽可能去满足胃口较大的孩子 代码如下: class Solution { public: int findContentChildren(vector<int>& g, vector<int>& s) { sort(g.begin(), g...原创 2020-08-03 19:20:10 · 225 阅读 · 0 评论 -
排序
一、数组中的第k个最大元素 难度:medium LeetCode题目号:215 题目描述: 思路: 本题目可使用快排或堆排,由于堆排有现成的数据结构(STL的priority_queue,即优先队列,内部由堆实现),实现起来很容易,故这里只谈一下快排的思路 假设数组中元素个数为n个,那么找第k大的元素就相当于找第n-k小的元素,由于快排的性质,每次划分后,比基准元素小的元素被划分到基准左边,比基准元素大的元素被划分到基准右边,故可将划分结果分为三种情况: 1)基准位置pos==k,说...原创 2020-07-28 15:04:48 · 123 阅读 · 0 评论 -
双指针
一、 两数之和 II ——输入有序数组 Leetcode题目号:167 难度:easy 题目描述: 思路: 设置双指针low和high,分别指向两个数中的较小数和较大数,low从数组第一个元素开始,high从数组最后一个元素开始,分为以下三种情况: num[low] + num[high] == target 即找到了满足题目的两个元素,但由于题目要求下标从1开始,故将low和high都加1后存入答案数组,直接退出循环,返回答案即可。 num[low] + ...原创 2020-06-23 22:23:42 · 186 阅读 · 0 评论