Jaster_wisdom的专栏

待到山花烂漫时,她在丛中笑

LeetCode55. 跳跃游戏

题目大意:判断是否可以从数组的第一个位置调到最后一个位置,每次跳得步数必须小于等于当前位置上的值题目分析:使用贪心算法,每次选择最远能达到的地方,假设从某一点最远可以到达A点,那么A点之前的所有点都是可以到达的。所以我们只要不断的更新最远可达到的点,然后看是否最远的点超过了终点即可。具体来说,就是...

2018-06-14 19:48:20

阅读数:59

评论数:0

LeetCode40. 组合总和II

题目大意:给定一个数组,和一个目标值,找出数组中所有可以使数字和为target的组合。数组中的数字可以重复,并且每个元素只能使用一次。题目分析:本题和LeetCode39. 组合总和很类似,唯一的区别在于每个元素不能无限制地取。所以我们只要在递归的时候将参数改成从后一个元素开始递归。同时,同一位置...

2018-06-13 20:11:40

阅读数:129

评论数:0

LeetCode39. 组合总和

题目大意:给定一个数组和一个目标值,返回数组内可以使数字和为target的组合,注意数组内的数字可以重复选,但是组合的结果要求不能重复。题目分析:本题采用递归较容易解答。首先,将数组内的元素由小到大排序,然后不断地进行试探,直到和为target。若当前和小于target,则继续往里面加元素;若当前...

2018-06-13 19:31:59

阅读数:114

评论数:0

LeetCode53. 最大子序和 (动态规划/分治法)

题目大意:求出一个序列的最大子序和,顾名思义,就是一段最大的连续序列的和题目分析:本题可以用两种解法求解,动态规划或分治法法一:动态规划,用result[i]保存以数字nums[i]结尾的最大子序和,然后不断更新result数组的最大值即可。时间复杂度O(n)代码展示:class Solution...

2018-06-12 10:43:31

阅读数:231

评论数:0

LeetCode41. 缺失的第一个正数

题目大意:找到一个未排序序列中的第一个缺失的正数。简而言之,就是看1在不在这个序列中,如果不在的话输出1;否则看2在不在这个序列中,如果不在的话输出2;否则看3在不在这个序列中……题目分析:本题的难点在于只能使用常数级别的空间,也就是说,不能开辟一个flag数组,若出现某个数,就将flag值标1,...

2018-06-12 09:23:15

阅读数:147

评论数:0

LeetCode12. 整数转罗马数字

题目大意:将一个1到3999范围内的整数转为罗马数字题目分析:首先熟悉转换规则,然后可以使用两个list存储对应的映射关系,然后每次从大到小看num是否大于1000,大于900,大于500,若在某个区间的话,就将罗马数字加进来,num减去相应的数值,直到num为0代码展示:class Soluti...

2018-06-11 20:10:26

阅读数:36

评论数:0

LeetCode47. 全排列 II

题目大意:给定一个含有重复元素的序列,返回这个序列所有不重复的全排列题目分析:与最基本的全排列递归算法相比,本题要对重复的元素进行特别的处理。例如序列“112”,第一个1和第二个1就不需要交换了,因为交换前后排列的序列是重复的。例如序列“211”,当“2”与第一个“1”交换了之后,变成第一个数字是...

2018-06-11 15:46:13

阅读数:54

评论数:0

Leetcode46. 全排列

题目大意:求出一个序列的全排列题目分析:全排列问题都可以用递归的方式来解决,将第一个数分别与后面的每一个数交换,然后对后面的数进行全排列。全排列问题的模板如下:#include <iostream> using namespace std; void ...

2018-06-10 22:01:36

阅读数:61

评论数:0

LeetCode50. Pow(x,n)

题目大意:实现一个计算机中求指数幂的操作。题目分析:我觉得这道题是不需要考虑大数问题的,因为如果幂取到2^30的级别,底数取2的话,这个结果是无法用float或double表示的。本题在计算过程中需要优化,常规的解法会出现内存不够的情况。我们知道,求a的n次方,可以用以下公式来表示:当n为偶数时,...

2018-06-10 12:40:56

阅读数:28

评论数:0

Leetcode28. 实现strStr()

题目大意:实现字符串匹配函数,即在文本串S中查找一个模式串P的出现位置,若不出现返回-1题目分析:暴力解法,将模式串P与文本串S一位一位的比较,若相同,则继续比较下一位;若不同,则将模式串P向后移动一位,继续往后比较。时间复杂度为O(m*n),假设文本串S的长度为m,模式串P的长度为n。代码展示:...

2018-06-10 10:34:52

阅读数:39

评论数:0

Leetcode33. 搜索旋转排序数组

题目大意:返回旋转排序数组中的值等于目标值的元素的索引题目分析:使用二分法查找。根据旋转数组的性质,将这个数组从中间切开,前后两个子数组必定有一个是按照升序排列的,我们在升序的子数组中判断是否存在等于目标值的元素,若没有,则在另一个部分查找。代码展示:class Solution(object):...

2018-06-09 21:26:03

阅读数:54

评论数:0

Leetcode34. 搜索范围

题目大意:给定一个升序的整型数组和一个目标值,找到这个目标值在数组中的开始和结束的位置题目分析:本题使用二分查找的思想,不断地取中间元素,比较它和目标值的大小。若中间元素的值比目标值小,则在后面的部分查找;若比目标值大,则在前面的部分查找。若相等,则在该中间元素前后试探是否还有和目标值相等的元素,...

2018-06-09 20:44:50

阅读数:39

评论数:0

LeetCode18. 四数之和

题目大意:在一个数字序列中找出不重复的四个元素,使得它们的和等于目标值target题目分析:本题和LeetCode15 三数之和思路基本相同,只要设置两重循环,先固定前两个数,后两个数的话,只要分别用两个指针指向剩余元素的一头一尾,若当前的和比target大,则后面的指针前移;若当前的和比targ...

2018-06-05 21:32:13

阅读数:55

评论数:0

LeetCode22. 括号生成

题目大意:给定n表示括号的对数,输出所有有效的括号的组合题目分析:递归求解,用leftnum和rightnum分别表示剩余可用的左括号和右括号的个数,当使用了一个( ,则leftnum-1; 同理,使用了一个 ),则rightnum-1。 当leftnum>0时,可用( 填充...

2018-06-05 20:43:32

阅读数:58

评论数:0

Leetcode21. 合并两个有序的链表

题目大意:给定两个有序的链表,要求给出合并之后的一个链表题目分析:鉴于两个链表是有序的,用两个指针分别指向各自第一个元素,将其中小的那个元素作为新链表的第一个元素,同时将指向较小元素的指针后移一格,直到指向两个链表的末尾。若有一个链表已经到了末尾,直接将另一个链表的元素添加进来即可。代码展示:cl...

2018-06-05 19:58:14

阅读数:49

评论数:0

Leetcode26. 删除排序数组中的重复项

题目大意:要求删除给定排好序的数组中的重复项题目分析:因为数组已经排好序,所以可以从前往后遍历查找,若发现当前一个元素值与前一个值相同,则表示重复了。如果一发现重复的项,就将后面的元素前移,会导致时间超,时间复杂度O(n*2).本题思路是:将第一个元素定为标记元素,从第二个元素开始,若元素与标记元...

2018-06-05 19:33:05

阅读数:38

评论数:0

LeetCode19. 删除链表的倒数第N个节点

题目大意:删除一个单链表中的倒数第N个结点题目分析:首先,获得单链表中的结点个数count,然后从前往后找到第count-N+1个结点,即我们要删除的结点,删除即可。时间复杂度:两次遍历单链表即可。代码展示:# Definition for singly-linked list. # class ...

2018-06-03 16:47:45

阅读数:49

评论数:0

Leetcode20. 有效的括号

题目大意:判断给定的字符串是否有效,即左右括号必须按序匹配。题目分析:本题可以用栈来实现,每次遇到'(' 或 '[' 或 '{',就将其入栈; 遇到其他情况,就弹出栈顶的元素,并分析栈顶元素和当前元素是否可以匹配,若可以匹配,就继续循环,否则就输出无效。当循环结束时,若栈中还有元素,表明有多余的括...

2018-06-03 15:48:21

阅读数:29

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭