leetcode
karen17
这个作者很懒,什么都没留下…
展开
-
leetcode-9.回文数
题目:思路:简单题啊~转换为字符串然后用左右指针判断。其实也可以不转换字符串,用除和取余做。代码:class Solution {public: bool isPalindrome(int x) { string y=to_string(x); int left=0,right=y.size()-1; while (lef...原创 2020-04-07 19:54:39 · 178 阅读 · 0 评论 -
leetcode-49.字母异位词分组
题目:思路:用map来存异位词,代码:class Solution {unordered_map<string, vector<string>> m;public: vector<vector<string>> groupAnagrams(vector<string>& strs) { ...原创 2020-04-07 19:40:10 · 211 阅读 · 1 评论 -
leetcode-66.加一
题目:思路:简单题,只要考虑最后有没有进位就好了~代码:class Solution {public: vector<int> plusOne(vector<int>& digits) { int carry = 1; for(int i = digits.size() - 1; i >= 0; i-...原创 2020-04-07 19:24:04 · 180 阅读 · 0 评论 -
leetcode-46.全排列
题目:思路:回溯,不过因为是c++写,又另外用了一个vector来标记当前位置的数是否使用过,就是代码里的flags;如果是python可能就不用记flags,直接每次用过了nums[i],缩短整个nums即可。代码:class Solution {public: vector<vector<int>> res; void helper(...原创 2020-04-07 19:21:00 · 155 阅读 · 0 评论 -
leetcode-78.子集
题目:思路:回溯,因为原nums没重复字符,所以还挺简单代码:class Solution {public: vector<vector<int>>res; void helper(vector<int>& nums,vector<int>& path,int start){ res...原创 2020-04-07 18:05:25 · 152 阅读 · 1 评论 -
leetcode-124.二叉树中的最大路径和
题目:思路:这个题难就难在最大路径可能并不经过root点,所以对于每一点而言都有可能构成最大路径。在递归的时候对每一点都求其所有左节点的值和其右节点的值,如果有小于0情况就抛弃,对应代码里的tmp1=self.helper( root.left);left_val=tmp1 if tmp1>0 else 0。另外记一个全局的res记录最大值~ 代码:pytho...原创 2020-04-06 01:52:55 · 158 阅读 · 0 评论 -
leetcode-115.不同的子序列
题目:思路:这题和72.https://leetcode-cn.com/problems/edit-distance/特别像,在dp的条件上有一点点不同。(1)如果s[j-1]==t[i-1],那么当前的dp[i][j]和 “在s中去掉当前字符 且在t中去掉当前字符” 以及“ 仅在s中去掉当前字符”这两种情况有关,所以dp[i][j]=dp[i-1][j-1]+dp[i][j-1]...原创 2020-04-06 01:41:32 · 113 阅读 · 0 评论 -
leetcode-75.颜色分类
题目:思路:三个指针,分别记录左右边界和当前指的index。有一个样例不好通过,是[2,0,1],需要注意的是:(1)如果nums[i]==2,交换当前nums[i]和nums[r]后,不要给i+1,因为可能交换后的nums[i]=1;(2)在while大循环中i<=r,不是i<r。代码:class Solution {public: void sortCo...原创 2020-04-06 01:35:29 · 121 阅读 · 0 评论 -
leetcode-324.摆动序列2
题目:思路:排序后,从中间和结果遍历。代码:class Solution {public: void wiggleSort(vector<int>& nums) { int size = nums.size(); vector<int> tmp(nums); int end = size-1...原创 2020-04-06 01:04:12 · 250 阅读 · 0 评论 -
leetcode-414.第三大的数
题目:思路:虽然是个简单题,但我写的还是挺久的....有两个地方容易错:(1)重复字符要过滤,不然第三个样例过不去。(2)测试样例中居然有INT_MIN,比如[1,2,INT_MIN],一般正常时候我们写就会输出1,但这种时候要输出INT_MIN。这种时候就要单独写一个flag来判断nums中是否有INT_MIN,并且在最后return的时候也要注意条件判断。代码:class S...原创 2020-04-06 00:31:34 · 121 阅读 · 0 评论 -
leetcode-852.山脉数组的索引
题目:思路:这一题我用的和162.寻找峰值同样的代码,就过了...博客链接:https://blog.csdn.net/karen17/article/details/105333071但这题没有时间复杂度的要求,应该也可以用遍历做。其实可以在数组的收尾都添加最小值,这样就不用担心越界了。代码:class Solution {public: int peakInde...原创 2020-04-05 20:54:19 · 171 阅读 · 0 评论 -
leetcode-162.寻找峰值
题目:思路:看到时间复杂度的要求,O(logN),基本上就是二分了。如果每次nums[mid]>nums[mid+1],那证明峰值在mid的左边或在mid上,缩小右边边界,使right=mid。如果nums[mid]<=nums[mid+1],那么峰值就在mid的右边,放大左边边界,使left=mid+1.代码:class Solution {public: ...原创 2020-04-05 20:46:06 · 139 阅读 · 0 评论 -
leetcode-131.分割回文串
题目:思路:回溯,写一个辅助函数来实现回溯操作。以python代码为例,如果当前i==length,就代表已遍历完字符串s,将子路径path加入最终res中。i记录了每次回溯的开始index。代码:python版:def partition(self, s): res=[] length=len(s) def helper(path,i): ...原创 2020-04-05 20:11:13 · 184 阅读 · 0 评论 -
20.有效的括号--python
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。法:用栈,遇到左括号就压栈,否则pop栈顶括号,看与当前右括号是否匹配。最后注意判断栈是否为空,不为空的话说明字符串中的左括号比右括号多,字符串无效def isValid(self, s): """ :type s: str :rtype: ...原创 2019-03-29 12:44:38 · 143 阅读 · 0 评论 -
19.删除链表的倒数第N个节点--python
题目:给定一个链表,删除链表的倒数第n个节点,再返回链表的头结点。例如给定链表1->2->3->4->5,删除n=2个节点,结果是1->2->3->5法1:先计算链表长度count,删除倒数第n个,相当于删除正数count-n+1=5-2+1=4个(开头从1开始计),所以要找它前面的那个节点,也就是第3个,在上面的例子中是找到节点3,记为p,将p...原创 2019-03-29 12:38:50 · 671 阅读 · 0 评论 -
21.合并两个有序链表--python
题目:将两个有序链表合并为一个新的有序链表并返回法:和合并两个有序数组一样的思路,都是用两个指针p与q分别指向两个链表的头节点,注意每次不让链表断掉即可def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: List...原创 2019-03-29 12:52:34 · 285 阅读 · 0 评论 -
17.电话号码的字母组合--python
题目:给定一个包含数字2-9的字符串,返回它所能表示的字母组合法:先建立一个数字到字符的字典,再用列表写def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ if digits=='':return ...原创 2019-03-29 12:11:08 · 253 阅读 · 0 评论 -
551.学生出勤记录1--python
题:给定一个字符串来代表学生的出勤记录,其中三个字符:'A': Absent,缺勤 ,'L': Late,迟到,'P': Present,到场。如果一个出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。例如:输入: "PPALLP" ,输出: True 输入为:"PPALLL" ,输出: False。法:统计字符A出现次数和字符L的连续出现次数。...原创 2019-05-22 10:28:51 · 618 阅读 · 0 评论 -
14.最长公共前缀--python
题目:编写一个函数查找字符串数组中的最长公共前缀法1:对字符串排序,对于每个字符都是按字典序排,这样第一个字符和最后一个字符的差距也就最大,找到他俩的最长公共前缀就是整个数组的最长公共前缀def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str ...原创 2019-03-29 12:06:39 · 127 阅读 · 0 评论 -
22.括号生成--python
题目:给出n代表生成括号的对数,要求生成所有可能的并有效的括号组合法:深搜,left与right分别表示还可以生成的左右括号的个数,但要注意的是只有right>left时,才可以生成一个右括号 def generateParenthesis(self, n): """ :type n: int :rtype: List[str] ...原创 2019-03-29 13:01:47 · 340 阅读 · 0 评论 -
26.删除排序数组中的重复项--python
题目:给定一个排序数组,原地删除重复出现的元素,返回移除后数组的新长度法:快慢指针,快指针遍历数组,然后比较nums[fast]与nums[slow]1)如果不同的话,把nums[slow+1]=nums[fast],然后快慢指针同时后移一个2)相同的话,证明是重复出现的元素,只后移fast def removeDuplicates(self, nums): ...原创 2019-03-29 13:07:36 · 178 阅读 · 0 评论 -
27.移除元素--python
题目:给定一个数组nums和值val,原地移除数组中所有数值等于val的元素,返回移除后数组的新长度法:和leetcode26思路一样,都是用快慢指针,但这次是将nums[fast]与val比较,1) 不同的话就把nums[slow]=nums[fast],再将slow与fast同时后移2)相同的话,只移动fastdef removeElement(self, nums, val...原创 2019-03-29 13:12:25 · 285 阅读 · 0 评论 -
28.实现strStr()--python
题:给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1法:先找在haystack中等于needle[0]字符的位置i,再从i开始依次比较后续的字符和needle中的字符是否相同,这里会额外设一个指针j,一旦haystack[i+j]!=needle[j],直接brea...原创 2019-03-29 13:19:28 · 455 阅读 · 0 评论 -
554.砖墙--python
题:画一条自顶向下的、穿过最少砖块的垂线。法:这题极端情况,一条垂线穿过最多砖块的数目就是,整个砖墙的行数len(walls)。那么我们对每个位置都 建立index与砖块边缘数目的关系。比如题目中给的例子:行数=len(walls)=6,列数=6,对于index=0和index=6是整个砖墙的边缘,不考虑。对于index=1时,在该位置结束的砖块数有3个,index=2时,在该位置结束的砖块数...原创 2019-05-22 10:11:28 · 437 阅读 · 0 评论 -
553.最优除法--python
题:给定一组正整数,相邻的整数之间将会进行浮点除法操作。例如,[2,3,4] -> 2 / 3 / 4 。要找出怎么添加括号,才能得到最大的结果,并且返回的表达式不应该含有冗余的括号。法:可以发现nums中第一个数永远在分子上,第二个数永远作为被除数在分母上,那么如果后面的数都可以在分子上,就可以获得最大结果。所以根据例子:给定 [1000,100,10,2],输出 "1000/(10...原创 2019-05-22 10:19:56 · 335 阅读 · 0 评论 -
543.二叉树的直径--python
题:给定一棵二叉树,计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。例如题目中给定二叉树,它的直径长度为4。 1 / \ 2 3 / \ 4 5 法:这题用一个辅助函数计算当前节点的左右子树的depth,然后depth_left+depth_...原创 2019-05-22 10:37:09 · 573 阅读 · 0 评论 -
29.两数相除--python
题:给定两个整数,将两数相除,不能用乘法、除法和mod运算符法:规定不能用乘法、除法和取余操作的话,就只能用加减法和位运算,其中右移就相当于乘2倍操作def divide(self, dividend, divisor): """ :type dividend: int :type divisor: int :rtype: ...原创 2019-03-29 14:05:08 · 1498 阅读 · 4 评论 -
11.盛最多水的容器--python
题目:给定height中每个数代表一条竖线的高度,找出height中两条线,使得它们与x轴共同构成的容器可以容纳最多的水法:左右指针,只是移动左右指针的条件有点特别,比较height[left]与height[right]的大小,如果height[left]是较小的那条线,使得left+=1,因为此时height[left]相当于是“短板”,考虑left后的数可能会获取更大的值def m...原创 2019-03-28 23:20:04 · 268 阅读 · 0 评论 -
9.回文数--python
题目:判断一个整数是否为回文数法:将整数转换为字符串,用左右指针即可def isPalindrome(self, x): """ :type x: int :rtype: bool """ s=str(x) left,right=0,len(s)-1 while left<...原创 2019-03-28 23:10:18 · 322 阅读 · 0 评论 -
8.字符串转换整数(atoi)--python
题目:将一个字符串转换为有效的整数法:这题需要考虑的情况比较多1)先将字符串两边去空格2)判断去完空格的字符串str,是否为空,空的话返回0;不为空的话判断第一个字符str[0]是否为“+”,“-”,区别符号位,再使str=str[1:];另外如果str[0]不满足str[0]>='0' and str[0]<='9'的要求的话,直接返回03) 对于剩下的str,判断每...原创 2019-03-28 23:08:12 · 307 阅读 · 0 评论 -
350.两个数组的交集2
题目:给定两个数组,编写一个函数计算它们的交集,注意输出元素的次数要与元素在两个数组中出现的次数一致法:建立字典dict1,统计num1中每个字符出现的次数,然后遍历nums2中的每个元素x,如果x在dict1中且dict1[x]>0,说明x是交集元素,加入到res中并使dict1[x]-=1,因为如果一个元素在nums2中出现多次,而只在nums1中出现一次,不改变字典中dict1[x...原创 2019-04-01 11:44:13 · 113 阅读 · 0 评论 -
357.计算各个位数不同的数字个数--python
题目:给定一个非负整数n,计算各位数字都不同的数字x的个数法:n=0时,return 1;n=1时,x=0~9都是不同的,return 10,其中10-9+1 n=2时,只有一位但不同的有10个,有两位且每位数字都不同的有9*9=81,所以总体return 81+10=91 n=3时,有三位但每位数字都不同的有9*9*8=648,再加上n=2时的返回结果91,总...原创 2019-04-01 11:43:58 · 636 阅读 · 0 评论 -
365.水壶问题--python
题目:有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?例如x=3,y=5,z=4时return True,分析一下如果把5升的水壶装满水,然后倒入3升的水壶中,这时候5升的水壶里还剩2升水;然后把3升的水壶里的水都倒掉,再把5升水壶里的2升水倒入3升水壶中,再把5升的水壶装满,这时候3升的水壶里有2升水,5升的水壶里5升水,...原创 2019-04-01 11:43:08 · 1667 阅读 · 0 评论 -
367.有效的完全平方数
题目:给定一个正整数num,如果num是一个完全平方数,返回True,否则返回False法1:观察到完全平方数1,4,9,16都是奇数的累加,比如1=1,4=1+3,9=1+3+5,16=1+3+5+7等等def isPerfectSquare(self, num): """ :type num: int :rtype: bool ...原创 2019-04-01 11:44:26 · 144 阅读 · 0 评论 -
50.Pow(x,n)--python
题:计算x的n次幂函数法1:这题实习面试的时候被问过两次了...不知道为什么考到的概率会这么大。一次是在头条的ailab三面,一次是阿里淘宝技术部的一面,每次我最熟悉的都是循环写法,不是普通的循环,直接乘n次x肯定不对。而是分n为奇偶,1)n为奇的话每次res*=x,n-=1;2)n为偶的话,每次使得x=x*x,n//=2, res不变即可def myPow(self, x, n): ...原创 2019-04-01 11:42:45 · 180 阅读 · 0 评论 -
33.搜索旋转排序数组--python
题:假设按照升序排序的数组在预先未知的某个点进行了旋转,给定一个目标值,如果数组中存在这个目标值,返回它的索引,否则返回-1,数组中不存在重复元素法:这题木有重复元素,所以不存在nums[mid]既等于nums[left]又等于nums[right]的情况。数组在某个位置进行旋转,那么整个数组分成了两个递增的数组,比如nums=[4,5,6,7,0,1,2],前后数组都是单调增的。根据nums...原创 2019-04-01 13:22:47 · 503 阅读 · 0 评论 -
31.下一个排列--python
题:算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)法:舍友说这题在面快手算法岗实习的时候考过。其实就是从nums从后往前找,如果找到nums[i]>nums[i-1],证明在nums[i-1]这一位存在一个比较小的数,是要被替换掉的,具体用哪一位替换nums[i-1]? 再从nums[-1]开始找,找到...原创 2019-04-01 13:53:06 · 362 阅读 · 0 评论 -
4.寻找两个有序数组的中位数--python
题目:给定长度为m和n的两个有序数组nums1和nums2,找出两个有序数组的中位数,要求时间复杂度为O(log(m+n))法:hard题,看了好几次都没太懂原理....参照leetcode all in one的题解,勉勉强强写出个python版本。题解地址:http://www.cnblogs.com/grandyang/p/4465932.html比较核心的就是 变相的二分,靠比较n...原创 2019-04-01 15:14:00 · 229 阅读 · 0 评论 -
7.整数反转--python
题目:给定有符号数,将该整数中每位上的数字进行反转法:先判断x是否为0,是的话直接返回0;x小于0的话,转换为abs(x),然后针对x大于0的情况,都是求余、整除操作,最后判断res是否越界即可。为什么要将x小于0都转换为绝对值?举例如果x为-120,那么最后会剩x=-1,x//10一直为-1陷入死循环。def reverse(self, x): """ ...原创 2019-03-28 23:00:57 · 386 阅读 · 0 评论 -
5.最长回文子串--python
题目:给定一个字符串s,找到s中最长的回文子串法:写一个辅助函数helper,返回以当前字符为中心的可得到的最长回文串的长度。在原字符串s中遍历,对每个字符都执行helper函数,得到每个字符可产生的最长回文串的长度,再根据长度length的奇偶找回文子串的起点1)如果length为奇,正好以当前字符为中心,回文串左右对称2)如果length为偶,以当前字符和当前字符下一个字符为中心...原创 2019-03-28 22:42:14 · 235 阅读 · 0 评论