![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
chyang1999
这个作者很懒,什么都没留下…
展开
-
575. Distribute Candies-分糖果问题
说实话,自己非常讨厌刷题,而且对算法这方面不太感兴趣,只怪本科的时候玩的太多了,没有好好学习,学不会数据结构和算法,才导致今天特别讨厌算法。但是。。。。。我还是注册了LeetCode,开始看看有没有简单容易的、适合自己的题做做。 今天看到了575这道题,大意如下: 一个整数数组,长度为偶数,里面的不同的数字代表了不同的糖果,而每一个数字代表了对应种类糖果中的一个。现在你要开始分糖果了,但是弟弟原创 2017-06-15 21:23:29 · 484 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
两数之和的第二个版本:这次假定给定的数组是按升序排好序的。 1.仍然可以采用暴力求解法(brute force),这种方法的分析与1. Two Sum中的第一种方法是一样的。这里就不给出解法了。 2.既然数组是有序的,我们可以设置两个下标,分别指向数组的两端,如果两个下标对应的数组元素之和等于target,则正好找到,返回相应的下标+1即可;若大于,则右端的指针应该左移;若小于原创 2017-10-30 14:55:24 · 321 阅读 · 0 评论 -
1. Two Sum
两数之和的第一个版本:给定一个整形数组和一个整数target,如果在数组中存在两个元素之和为target,则返回这两个元素的下标。 1.暴力求解法(brute force) 我的第一个思路当然是暴力求解法(brute force),这种方法只需要两重循环即可,其实是一种排列组合的方式,求出所有可能的组合方式,然后从其中查找是否存在和为target的组合,如果有则返回对应的下标。原创 2017-10-30 14:25:56 · 324 阅读 · 0 评论 -
21. Merge Two Sorted Lists
合并两个有序链表:这道题主要是比较两个链表中的元素大小,并以此为依据,选择相应的结点进行重组,最后将生成的链表返回。 这里我采用了两种方法:循环和递归 首先是循环的方法,这种方法主要是遍历两个链表,直到其中一个为空,最后将提前为空的链表直接插入到结果链表之后即可,返回时请注意,是head.next,而不是head,因为头结点没有存储任何信息: 然后是递归的方法:原创 2017-09-12 13:43:09 · 208 阅读 · 0 评论 -
20. Valid Parentheses
括号匹配问题:这个题基本上没什么技术含量,稍微复杂点的可能会在输入字符串中包含别的字符,比如说判断一个Java源代码中的所有括号是否匹配等。 我的解法如下代码所示:原创 2017-09-11 16:49:52 · 184 阅读 · 0 评论 -
8. String to Integer (atoi)
字符换转化为整形:这道题在leetcode上归为easy,其实并不easy,就是在考察一个人考虑问题的全面性,我提交了很多次才通过,都是因为考虑不全,导致部分测试用例无法通过。 这道题题目描述很简单,就是字符串转化为整形,但是要考虑的可能的输入情况是很多的,在Requirements for atoi里给出了具体的要求。 1.丢弃字符串中第一个非空格字符前的所有空格字符 2.字符串的原创 2017-09-11 14:23:48 · 205 阅读 · 0 评论 -
7. Reverse Integer
整数翻转,大概情况如图所示。 以前也做过这样的题,只不过没有考虑翻转之后溢出的情况,我的解法如下,其实跟以前的实现并没有什么区别,只是在每次res改变之前判断一下它是否已经超过了最大值和最小值除以10的值,如果已经超过,那么res乘以10之后肯定是溢出的,所以直接返回0。原创 2017-09-11 13:19:51 · 170 阅读 · 0 评论 -
226. Invert Binary Tree
二叉树倒置:总的来说就是交换二叉树的左右孩子,使得交换前后的两棵树是镜像对称的。 关于树的问题用递归的思想来做肯定是没有问题的,我第一个解法也就是递归的方法,这里我就不再介绍我的解法了,我们看一下leetcode上给出的详细介绍。原创 2017-09-17 09:48:25 · 233 阅读 · 0 评论 -
203. Remove Linked List Elements
移除链表中的元素:从一个整型链表中删除所有值等于val的元素 这个题目让人想到的第一个解法就是遍历链表一一比较来删除值等于val的元素。 提交结果如下图所示: 这种方法还是很不理想的,只打败了7.28%的提交者,当然要思考问题出在了哪里。 思考了很久,也没有发现更快的方法,而且上述方法的时间复杂度为O(n),已经是很低了,但是我发现自己第一次提交的代码重复代码太多了原创 2017-09-16 09:14:39 · 215 阅读 · 0 评论 -
67. Add Binary
二进制字符串相加:给定两个二进制字符串,返回他们的和。 这道题的解法比较简单,将两个二进制字符串右对齐,然后逐元素相加就可以了,同时设置一个进位变量。时间复杂度为O(n)(n为两个字符串长度中的较大者)。原创 2017-09-24 15:23:57 · 274 阅读 · 0 评论 -
66. Plus One
大数加1:给定一个数组表示的非负整数,最高位在数组的前面,对这个整数加1. 这道题最直观的解法是逆向遍历数组,同时处理进位,如果最后一位仍然有进位,则直接在数组的最前面插入1.时间复杂度为O(n),空间复杂度为O(1)。 但是这道题可以减少一些计算的次数,只有当数组中全是9时,才能一直产生进位,最后遍历到最高位时,仍然还有进位。原创 2017-09-24 15:01:00 · 338 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
数组中重复元素的移除:要求空间复杂度是常量级的 我的第一个想法还是跟 27. Remove Element里面的第一个相同,遇到重复的就移动数组,把前面的重复值覆盖了,但是这样的时间复杂度比较大O(n2) 提交结果果然不尽人意 这时候脑子里的第一个反应就是肯定还有更快的,然后想法跟 27. Remove Element的第二种也是一样的,我惊奇的发现这两个问题的解决思原创 2017-09-15 19:42:49 · 210 阅读 · 0 评论 -
27. Remove Element
移除元素:给定一个数组和一个值,移除数组中该值出现的所有实例,最终返回移除后的新的数组长度。 要求不能分配额外的数组空间,空间复杂度是常量级的,原数组中的元素顺序是可变的,超出长度的部分的值无关紧要 我的第一个想法是移动数组元素,也就是把数组中与该值相等的元素统统往后移,利用两个for循环即可实现,但是这样的话时间复杂度是O(n2),确实比较慢。 提交结果如图所示:原创 2017-09-15 19:20:32 · 253 阅读 · 0 评论 -
338. Counting Bits
位计数:给定一个数num,求从0-num之间每个数字的二进制位中1的个数。 要求: 1.时间复杂度是O(n) 2.空间复杂度也是O(n) 以上两个要求也就限制了我们不能使用简单的暴力求解的方法去解决该问题,必须去总结数据中的规律,找到更简单的方法。 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000原创 2017-09-14 15:24:36 · 253 阅读 · 0 评论 -
191. Number of 1 Bits
汉明权重 这个解法很直接,就是统计n对应的二进制中1的个数 提交结果如下图所示:原创 2017-09-14 11:31:37 · 234 阅读 · 0 评论 -
461. Hamming Distance
汉明距离:两个整数中对应的字节不同的个数。 这里我介绍一下自己的两种解法。 第一种解法是先对x和y做异或^运算,然后对结果中1的个数进行计数。 第二种解法是直接比较x和y中不同字节的个数。原创 2017-09-14 11:00:45 · 213 阅读 · 0 评论 -
70. Climbing Stairs
爬楼梯问题:假设你正在爬楼梯,可以在n步之内到达顶端,但每次你只能爬1步或2步,求到达顶端的不同方法的个数。 这道题的第一个解法是我无意间发现的,我从n=1算到n=4,发现答案其实是一个斐波那契数列,所以就有递归和循环两种解法,亲测递归的解法会发生超时,所以这里不再给出递归的解法。 第一种方法的提交结果如图所示,感觉一般般。 第二种解法是基于动态规划的思想: 当n=原创 2017-09-13 17:09:22 · 274 阅读 · 0 评论 -
28. Implement strStr()
子串查找问题:在haystack中查找needle第一次出现的索引,如果needle不是haystack的一部分,则返回-1 子串匹配问题在数据结构(C语言版)(严蔚敏、吴伟民)这本书里面已经讲得很详细了,包括暴力求解法、KMP算法、改进的KMP算法等。 在刷题的时候,怀着侥幸的心理首先尝试了一下暴力求解法。然而,通过了!!!而且打败了47.65%的提交者,于是乎没有尝试KMP原创 2017-09-13 13:45:27 · 309 阅读 · 0 评论 -
653. Two Sum IV - Input is a BST
两数之和的第四个版本:输入是一颗二叉查找树。 首先讲一下我的解法: 二叉查找树的一个重要特点是其中序遍历的结果是一个有序数组。我们可以很好的利用该性质:首先得到BST的中序遍历结果,然后采用167. Two Sum II - Input array is sorted中的方法进行搜索,找到返回true,否则返回false。 /** * Definition for a bina原创 2017-10-30 15:24:01 · 322 阅读 · 0 评论