
LeetCode
东瓜Lee
这个作者很懒,什么都没留下…
展开
-
LeetCode算法题解 1108-IP 地址无效化
题目描述题解:讲address的每个字符串以.分隔,然后放入字符串数组,最后在除了最后一个字符串后面加入一个[.]就可以了。分隔是用的:strtok函数(字符串要用char表示)char —> string:直接强制转换string —> char*:char* str1= const_cast<char *>(str2.c_str());代码:class...原创 2020-03-02 20:34:25 · 179 阅读 · 0 评论 -
LeetCode算法题解 1290-二进制链表转整数
题目描述题解:我是直接逆转链表,然后按照二进制和十进制的转换关系求的,实际上还有很多方法。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) ...原创 2020-03-02 20:28:21 · 136 阅读 · 0 评论 -
LeetCode算法题解 234-回文链表
题目描述题解:直接看代码。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pu...原创 2020-02-29 21:32:57 · 237 阅读 · 0 评论 -
LeetCode算法题解 141-环形链表
题目描述题解:看代码。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {publ...原创 2020-02-29 20:29:27 · 202 阅读 · 0 评论 -
LeetCode算法题解 441-排列硬币【待进一步地完善】
题目描述题解:方法1:枚举法(不解释)方法2:等差数列法【待理解】方法3:二分法【待理解】代码:class Solution {public: int arrangeCoins(int n) { /* 方法1:枚举 */ if(n == 0) { return 0; } ...原创 2020-02-28 23:15:52 · 227 阅读 · 0 评论 -
LeetCode算法题解 198-打家劫舍
题目描述题解:动态规划方程:dp[i] = max(dp[i-2] + a[i],dp[i-1])对于第i号房屋,有两种选择:1. 拿这家的a[i],然后考虑dp[i-2]的(不能拿相邻的)2. 不拿这家的,考虑dp[i-1],从中选择大的。代码:class Solution {public: int rob(vector<int>& nums) {...原创 2020-02-28 22:51:05 · 286 阅读 · 0 评论 -
LeetCode算法题解 1037-有效的回旋镖
题目描述题解:这种题目有多种解法:两点能构成一条直线,然后判断第三个点是否在这条直线上即可如果三点在一条直线上,那么构成的面积肯定就是为0,如果没在一条直线上,面积就是非0的。代码:class Solution {public: bool isBoomerang(vector<vector<int>>& points) { ...原创 2020-02-23 20:30:59 · 254 阅读 · 0 评论 -
LeetCode算法题解 326-3的幂
题目描述题解:代码:class Solution {public: bool judge(int n,long long tmp) { if(tmp > n) { return false; } if(tmp == n) { return true;...原创 2020-02-21 21:21:38 · 143 阅读 · 0 评论 -
LeetCode算法题解 1018-可被 5 整除的二进制前缀
题目描述题解:刚开始我是直接枚举所有的二进制前缀,转换成十进制数来判断是否能被5整除,但是可能是因为精度,有的点过不了,我就看了别人的方法:一个数能否被5整除,要看转换成十进制的个位数,如果是0或者是5,就可以被5整除 。代码:class Solution {public: vector<bool> prefixesDivBy5(vector<int>...原创 2020-02-21 21:18:38 · 320 阅读 · 0 评论 -
LeetCode算法题解 674-最长连续递增序列
题目描述题解:遍历数组,用一个maxLen记录最长递增连续序列的长度,当前的数nums[i]大于前一个数pre,就curLen++, 然后记录下当前的最大长度,如果不大于就将curLen置为1。代码:class Solution { public: int findLengthOfLCIS(vector<int>& nums) { int...原创 2020-02-21 21:04:00 · 161 阅读 · 0 评论 -
LeetCode算法题解 1002-查找常用字符
题目描述题解:我就不解释题目了,直接说思路,首先开一个map1记录A[0]的字母情况,然后从A[1]遍历到最后一个字符串,每次都用map2记录下字符串的字母情况,和map1做交集,遇到相同的值,取较小的出现次数,得到map3,map3赋值给map1,最后得到的map3就是所有字符串map的交集,然后把结果记录到res数组即可。附上别人一个评论:代码:class Solution {...原创 2020-02-15 23:14:50 · 191 阅读 · 0 评论 -
LeetCode算法题解 350-两个数组的交集 II
题目描述题解:这道题有个简单版本,都是求出两个数组的交集(I不管出现的次数),而II考虑次数,比如样例1[1,2,2,1]、[2,2],不考虑次数那么2就是唯一的交集元素,考虑次数那么2在两个数组都出现了两次,所以就是[2,2],再看样例2,[4,9,5]、[9,4,9,8,4],4和9都在数组1中出现了1次,而在数组2中出现了2次,取较小次数,所以就是[4,9]。我的思路就是,一个数组对...原创 2020-02-15 22:58:19 · 174 阅读 · 0 评论 -
C语言/C++ 动态分配数组(一维/二维)的大小
c语言:malloc - freec++:malloc - free and new - delete代码(已通过编译):#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <climits>#include &...原创 2019-11-19 20:17:35 · 1294 阅读 · 0 评论 -
LeetCode算法题解 70-爬楼梯
题目描述题解:我用的就是动态规划,其实还有别的方法。两种形式:1. 自顶向下的递归(超时) 2. 自底向上的迭代代码:class Solution {public: /* 方法1:动态规划法(递归):超时 int dp(int x) { if(x == 1) { return 1; ...原创 2019-11-19 20:03:42 · 174 阅读 · 0 评论 -
LeetCode算法题解 203-移除链表元素
题目描述题解:其实这就是一道简单模拟题,看我的代码来理解吧:tmp:记录下临时的图,初始值就是grid开个循环:判断1:遍历grid,如果图中没有1,也就代表没有新鲜的了,直接返回分钟数 (放在前面是因为有可能初始状态就是没有新鲜的,直接返回0)。判断2:遍历grid,如果发现了2,那就把上、下、左、右的四个方向都判断一遍(不越界 + 值为1),就变为2,注意这里是把 tmp[i][...原创 2019-11-19 19:43:37 · 153 阅读 · 0 评论 -
LeetCode算法题解 205-同构字符串
题目描述题解:注意两个点:一个字母只能映射一个字母,也就是说假设 a -> b了,那就不能 a -> c了。一个字母只能被映射一次,也就是说假设 a -> b,那就不能 c -> b我的代码中的 map<char,char> mp 可以记录下每个字母映射的字母,比如 mp['a'] = 'b',就表示 a->b。思路直接看代码吧。代码...原创 2019-11-19 19:34:27 · 158 阅读 · 0 评论 -
LeetCode算法题解 231-2的幂
题目描述题解:循环判断法递归判断法性质法:2的幂对应的二进制数,一定有且只有一个1。代码:class Solution {public: bool isPowerOfTwo(int n) { /* 1. 循环解法 long long tmp = 1;// 可能num接近INT_MAX,但是tmp*2可能会超出INT_MAX。 ...原创 2019-11-19 19:26:45 · 193 阅读 · 0 评论 -
LeetCode算法题解 1232-缀点成线
题目描述题解:随便找两个点,求出两点相连的直线方程式,如果所有的点都满足就代表属于同一条直线上:根据两点求方程式:(x1,y1) (x2,y2) =>斜率式:k=(y2-y1)/(x2-x1) 直线方程 y-y1=k(x-x1)两点式:(x-x1)/(x2-x1)=(y-y1)/(y2-y1) (这里直接用两点式了)将第三个点(x3,y3)代入两点式,然后判断是否满足等式注...原创 2019-11-19 19:23:33 · 220 阅读 · 0 评论 -
LeetCode算法题解 203-移除链表元素
题目描述题解:迭代法递归法(操作链表的题目用递归,往往实现起来很简单,但是自己难想出来)两种方法(或者其他方法),跟着模拟一遍就理解了。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(i...原创 2019-11-18 21:03:51 · 216 阅读 · 0 评论 -
LeetCode算法题解 206-反转链表
题目描述题解:解法1:递归法解法2:迭代法解法3:直接反转元素法具体的思路看代码注释(如果不理解,跟着模拟一遍就可以了),还有其他的解法直接看LeetCode里面的题解吧。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;...原创 2019-11-11 21:13:37 · 296 阅读 · 0 评论 -
LeetCode算法题解 543-二叉树的直径
题目描述题解:这道题我刚开始的思路是:求出以根节点为中心,左子树的最大深度(从1开始) + 右子树的最大深度,对于样例来说就是:左子树深度(2) + 右子树深度(1) = 3,但是有个样例通不过,问题就出现在两个节点路径长度的最大值不一定根节点在中间的,有可能是任意的一个节点(也就是可能某个子节点在中间,两边的深度之和更大) ,所以递归的每个节点的时候都要求一次左右两边最大深度之和,然后记录...原创 2019-11-03 19:42:10 · 191 阅读 · 0 评论 -
LeetCode算法题解 997-找到小镇的法官
题目描述题解:思路:法官应该满足的条件:被信任N-1次(也就是在truct[i][1]出现了N-1次)没有信任过别人(也就是这个人不会出现在truct[i][0]中)具体看代码吧,其中还使用了map来记录下出现的次数。**注意:**当只有一个人时,也就是当N=1,不会有信任的情况,也就是truct数组为空,那么这个人就是法官。代码:class Solution {pub...原创 2019-11-01 21:17:49 · 374 阅读 · 0 评论 -
LeetCode算法题解 504-七进制数
题目描述题解:十进制数 -> 其他进制 的方法:倒序取余法注意点:0、负数原创 2019-11-01 21:10:53 · 178 阅读 · 0 评论 -
LeetCode算法题解 949.-给定数字能组成的最大时间
题目描述题解:刚一开始,我拿到这道题就直接分析,思考过程:我认为这四个数的范围应该是这样的:[0-2][0-3][0-5][0-9],也就是必须有四个这些个范围的数,然后要尽可能的时间大,那就是:从数组中选出<=2最大的数从数组中选出<=3最大的数从数组中选出<=5最大的数从数组中选出<=9最大的数而且要保证这几个数处于不同的位置,然后就报错了,样例没...原创 2019-11-01 20:30:01 · 292 阅读 · 0 评论 -
LeetCode算法题解 788-旋转数字
题目描述题解:看代码的注释。代码:class Solution {public: int rotatedDigits(int N) { int cnt = 0; for(int i = 1; i <= N; i++) { if(rotateIsOk(i))// 判断: 1.每个数位旋转180°后,是...原创 2019-11-01 20:15:02 · 201 阅读 · 0 评论 -
LeetCode算法题解 581-最短无序连续子数组
题目描述题解:方法1:将nums数组从小到大排个序得到sortNums数组,然后找到两个数组,从左边开始第一个不相等的位置left、从右边开始第一个不相等的位置right,最后right-left+1就是最短的无序连续子数组(将left-right的数排序,整个数组也会有序)。代码:class Solution {public: int findUnsortedSubarr...原创 2019-11-01 20:08:44 · 149 阅读 · 0 评论 -
LeetCode算法题解 342-4的幂
题目描述题解:我这里给出三种解法:1. 循环解法2. 递归解法前两种就不用解释了,直接看代码吧。3. 利用性质【待完成,待学习】代码:class Solution {public: bool isPowerOfFour(int num) { /* 1. 循环解法 long long tmp = 1;// 可能num接近INT_MAX,...原创 2019-11-01 20:03:34 · 135 阅读 · 0 评论 -
LeetCode算法题解 189-旋转数组
题目描述题解:这道题的解法是多样的:1. 直接模拟移动的过程,用两层循环来解决:第一层循环表示移动k次,然后每次记录下最后一个值,第二层循环从倒数第二个数到第一个数依次往后移动一个位置,最后把记录下的值放到第一个位置。注意:这个方法使用c++过不了,使用java可以过。2. 三次翻转法:比如给定的样例:1、2、3、4、5、6、7 ,k=3,最后的结果应该为:5、6、7、1、2、3、4...原创 2019-11-01 19:52:53 · 233 阅读 · 0 评论 -
LeetCode算法题解 414-第三大的数
题目描述题解:这道题如果不看时间复杂度那是挺容易的,一个排序就解决了,但是限制到O(n)还是要点方法才能解出来的:方法1:如果元素的个数<=2,直接返回最大的值即可。如果元素的个数>3,首先找出最大的(注意:可能有多个),把最大的数标记为INT_MAX,然后把这个最大的数记录下来为:realMaxV,然后找出第二大的(也可以有多个),把次大的也标记为INT_MAX,最后找...原创 2019-10-26 20:08:22 · 457 阅读 · 0 评论 -
LeetCode算法题解 1185-一周中的第几天
题目描述题解:首先要明白知识点:每年的第一天 不一定是星期一,刚开始我就是直接求出这一天是这年的第几天,然后去%7求星期数,但是一翻日历,发现2019年的第一天并不是星期一。题目给出的提示给出的日期一定是在 1971 到 2100 年之间的有效日期。是有作用的,可以通过查资料(比如Excel啥的)得到1971年1月1日的星期数,然后求出给定的日期距离这一天多少天,比如1971 /1/1...原创 2019-10-26 19:40:55 · 391 阅读 · 0 评论 -
LeetCode算法题解 242-有效的字母异位词
题目描述题解:方法1:定义一个tmp向量,遍历arr的元素赋值给tmp,如果发现元素的值为0,则多添加一个0,然后直接输出即可。方法2:如果要求不能开额外的空间,那么就是:遍历一次arr,记录下值为0的个数nums,在arr后面添加nums个-1(随便什么)。做一个1->nums的循环,第一次遍历找到第一个0,在后面插入一个0,其他元素往后移动一个位置,第二次遍历找到第3个...原创 2019-10-26 19:33:50 · 168 阅读 · 0 评论 -
LeetCode算法题解 242-有效的字母异位词
题目描述代码:class Solution {public: bool isAnagram(string s, string t) { sort(s.begin(),s.end()); sort(t.begin(),t.end()); if(s == t) return true; else ...原创 2019-10-26 19:21:00 · 191 阅读 · 0 评论 -
LeetCode算法题解 38-报数
题目描述题解:这道题目的其实是很简单的(难度的分类也是简单),但是乍一看并不是那么好做,首先看懂题目意思:比如1211,怎么报数呢?从左到右开始报数:1个1、1个2、2个1 => 111221第一种解法:n最大为30,那我就一个个地数出来,不过这方法太耗时间了,而且容易出错。第二种解法:写一个getCountResultBySqe(string str),传入一个字符串,比...原创 2019-10-26 19:18:46 · 239 阅读 · 0 评论 -
LeetCode算法题解 35-搜索插入位置
题目描述代码:class Solution {public: int searchInsert(vector<int>& nums, int target) { for(int i = 0; i < (int)nums.size(); i++) { if(nums[i] == target) ...原创 2019-10-26 19:07:27 · 282 阅读 · 0 评论 -
LeetCode算法题解 9-回文数
题目描述代码:bool isPalindrome(long long x){ if(x < 0) { // 负数不可能是回文数 return false; } else { long long tx = x; long long rx = 0; while(tx) ...原创 2019-10-22 19:51:17 · 148 阅读 · 0 评论 -
LeetCode算法题解 6-Z 字形变换
题目描述题解:当行数为1的时候,一定只有一行,而且会和原字符串一样。当行数不为1,开一个z数组,用于保存形成的z图形(从左往右看是按z字行排列的),初始化为’\0’,代表没有字符。定义一个bool isReachNumRows:值为false,表示没有达到最后一行,不断的对z[++i][j]赋值 (往下走)值为true,表示达到了最后一行,然后不断的对z[–i][++j]赋值 (...原创 2019-10-22 19:36:46 · 199 阅读 · 0 评论 -
LeetCode算法题解 1-两数之和
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]代码:...原创 2019-10-22 19:24:52 · 178 阅读 · 0 评论 -
LeetCode算法题解 28-实现strStr()
题目描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle ...原创 2019-10-22 19:22:02 · 251 阅读 · 0 评论 -
LeetCode算法题解 27-移除元素
题目描述给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前...原创 2019-10-22 19:19:57 · 150 阅读 · 0 评论 -
LeetCode算法题解 26-删除排序数组中的重复项
题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定...原创 2019-10-22 19:16:58 · 140 阅读 · 0 评论