LeetCode
记录自己LeetCode点滴
haha_liwei
这个作者很懒,什么都没留下…
展开
-
LeetCode55:jump-game
第一眼看到题,就想到了dfs方法,直接遍历每一个元素然后循环步数从最大步长往前跳,然后出现了超时测试样例是25000到1,然后后面还有一个1和两个0,所以这种深度遍历不能很难处理这样false情况。先贴上代码。 bool canJump(vector<int>& nums) { if(nums.size()<2) return t...原创 2019-03-18 15:37:38 · 129 阅读 · 0 评论 -
LeetCode47:Permutations II
这道题也是全排列问题,但是增加了题目的难度。因为这个给定的序列里面有重复元素,我开始的想法是设置一个map,然后每一个元素值是key,出现的数量是count,实际上这样做和设置visit数组是一样的做法,但是对于处理重复元素的问题,会出现更多的重复出现。因为这样做并没有记录那个元素被访问了。所以还是改为visit数组方法,但是我们会发现结果中会存在着大量的重复,比如(1,1,2),我们得到的结果可...原创 2019-03-17 14:32:36 · 100 阅读 · 0 评论 -
LeetCode46:Permutations
直观上看这道题就是一道dfs问题,所以我们按照dfs的套路直接写就行。这个题和47题Permutations2很相似,但是这道题相对的难度要第一写,因为这个给定的序列里面没有重复。我们在递归调用的时候设置一个visit数组记录一下当前位置是不是被访问就可以了。然后每一个递归调用都是从序列位置开始。代码入下: vector<vector<int>> permute(vec...原创 2019-03-17 14:16:20 · 213 阅读 · 0 评论 -
LeetCode38:Count and Say
一开始根本看不懂题,找不到规律然后在网上看到有的朋友是这样解读的。1. 12. 113. 214. 12115. 111221第一次是默认是1,然后读1 就是11,然后读11,就是21,然后读21,就是1211,然后依次类推,看到这个解读的时候才恍然大悟,然后就是写代码了。string countAndSay(int n) { ...原创 2019-03-13 15:46:11 · 102 阅读 · 0 评论 -
LeetCode43:Multiply Strings
首先看到题第一种想法就是暴力解答,就是用一个字符串中的一个数字和两一个成,然后把各个字符串再拼接起来。先贴上我的蠢方法这个办法看起来很长也很蠢,一开始bug也很多,调了半天,还好没有超时错误,后来又参考了别人的代码,真的死的心都有了,代码少,效率高。在本文的后面附上别人的解法。慢慢提高。class Solution {public: string multiply(string num1...原创 2019-03-12 20:02:48 · 102 阅读 · 0 评论 -
LeetCode40:Combination Sum II
该题和LeetCode:Combination Sum 很类似,不同点在于前者是不重复的数字,且组合数字可以重复,后者数字存在重复,然后组合数字不允许重复。相对于上一道题我们做入下简单修改,在递归调用的时候,把起始点改为下一个索引,而不是起始点不变,然后就是判断重复,因为在数组在使用之前我们已经坐了重复处理,所以我们在循环开始时我们采用与三数之和相似的手段即可。代码入下: vector&lt;...原创 2019-03-12 16:29:26 · 121 阅读 · 0 评论 -
LeetCode39:Combination Sum
本题是不同于3sum和2sum 他没有限制构成目标个数,也没限制重复,这是我们只管感受是深度遍历+剪枝。下面是代码:vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; combinationSum(vector&amp;lt;int&amp;gt;&amp;amp; candidates, int target) { vector&a原创 2019-03-12 14:08:13 · 110 阅读 · 0 评论 -
LeetCode17:Letter Combinations of a Phone Number
这道题最直观的做法是递归,直接看代码。vector&lt;string&gt; letterCombinations(string digits) { if(digits.size()==0) return {}; vector&lt;string&gt;res; //在这里我们首先构建一个map,在后去的递归函数中调用,用...原创 2019-03-12 13:58:51 · 87 阅读 · 0 评论 -
LeetCode28: Implement strStr()
解题思路:如果被查的字符串为空直接返回0;如果被查字符串长度大于原始字符串返回-1;为了节省时间我们可以在遍历原始字符的时候直到剩余的字符串长度等于被查的字符串长度。代码:int strStr(string haystack, string needle) { if(needle.size()==0) return 0; int ...原创 2019-03-01 19:01:34 · 93 阅读 · 0 评论 -
LeetCode26:Remove Duplicates from Sorted Array
解题思路因为数字本身就是排序的,所以直接遍历数组然后然后记录一个没有重复的数组的下标。代码int removeDuplicates(vector&lt;int&gt;&amp; nums) { int cur=0;//记录下当前的数组的前cur个数字没有重复,遇到没有重复加一。 for(int i=0;i&lt;nums.size();i++){ ...原创 2019-03-01 12:11:53 · 109 阅读 · 0 评论 -
LeetCode27:Remove Element
解题思路:这道题和LeetCode第26题相似,直接上代码代码:int removeElement(vector&lt;int&gt;&amp; nums, int val) { int count=0;//count记录的是count下标之前没有val值; for(int i=0;i&lt;nums.size();i++){ if(n...原创 2019-03-01 12:07:12 · 114 阅读 · 0 评论 -
LeetCode3:Longest Substring Without Repeating Characters
解题思路:一开始没有一点头绪,然后参考网上的答案,恍然大悟,并把这个思路整理下来分享给大家。 直接上代码 int mp[256];##因为字母或者素质可以用ASCII表示,完全映射到256数组中, for(int i=0;i&lt;256;i++){ mp[i]=-1;##这里初始化给每一个元素赋值为-1,用来记录每一个字符出现的顺序。 ...原创 2019-02-24 12:39:08 · 91 阅读 · 0 评论 -
LeetCode 8: String to Integer (atoi)
题目很简单,我一开始的思路就是把有效数字装进字符串里,然后判断字符串和int_max 和int_min的大小然后在吧字符串转成int。细节特别繁琐,后来看了别人的思路,瞬间觉得自己傻了很多。class Solution {public: int myAtoi(string str) { int i=0,j=0; string res=""; ...原创 2018-07-20 20:18:26 · 97 阅读 · 0 评论 -
LeetCode6:ZigZag Conversion
设置两个方向,从上往下是正,从下往上是负。class Solution {public: string convert(string s, int numRows) { string *str=new string[numRows]; int row=0,step=0; if(numRows<2) ret...原创 2018-07-20 14:39:54 · 86 阅读 · 0 评论 -
LeetCode 5: Longest Palindromic Substring
要求找出最长回文字符串,一开始采用比较笨的方法,两个for循环遍历然后判断每一个字串是不是回文时间复杂度是O(n3)class Solution {public: string longestPalindrome(string s) { int maxlen=0; string res=""; for(int i=0;i<s.s...原创 2018-07-19 20:42:18 · 154 阅读 · 0 评论 -
Leetcode53:Maximum Subarray
class Solution {public: int maxSubArray(vector<int>& nums) { int curMax=0; int res=INT_MIN; for(int num:nums){ curMax=max(curMax+num,num); ...转载 2018-07-13 21:07:24 · 139 阅读 · 0 评论 -
leetcode--44. Wildcard Matching
三种情况:1:若P[pcur]和S[scur]的字符相等都是普通字符,pcur++,scur++2 : 若P[pcur]==?,pcur++,scur++3:若P[pcur]==*,记录当前的位置,循环匹配字符串0个,1个,2个。。。。 一直到S字符串到结束4:最后判断P[pcur]的字符串若还有剩余其他的非*字符则为false,反之为true;class Solution {public...原创 2018-04-19 23:14:26 · 136 阅读 · 0 评论 -
Leetcode1:two sum
本题如果按照暴力解法是可以AC的,这里介绍一种比较高效的方法。因为是两数之和且没有重复,我们可以控制其中一个然后查找另一个。首先我们构建一个map,把数组的值和位置映射。vector<int>res;map<int,int>mp;for(int i =1;i<nums.size();i++){ mp[nums[i]]=i;##这里我们把数组中...原创 2018-01-06 18:07:09 · 171 阅读 · 0 评论 -
Leetcode :2:Add Two Numbers
这道题比较简单,主要注意下进位情况就可以了。int flag=0;ListNode *res=new ListNode(-1),*dummy=res;while(l1||l2){ int val1=l1?l1->val:0; int val2=l2?l2->val:0; int sum=val1+val2+flag; flag=sum/10;...原创 2018-01-06 18:08:23 · 153 阅读 · 0 评论 -
Leetcode18 :4sum 解题报告
int cmp(const void*a,const void*b){ return *(int *)a-*(int *)b;}int** fourSum(int* nums, int numsSize, int target, int* returnSize) { if(numsSize<4)return 0; qsort(nums,numsSize,sizeo...原创 2018-01-21 18:08:35 · 159 阅读 · 0 评论