
leetcode刷题笔记
_沥川往事
这个作者很懒,什么都没留下…
展开
-
leetcode 98. 验证二叉搜索树 Validate Binary Search Tree (使用c++/java/python)
https://leetcode-cn.com/problems/validate-binary-search-tree/https://leetcode.com/problems/validate-binary-search-tree/利用一个函数判断子树是否在上下限之间,当上下限为null时表示无限大。每递归一次,父节点就变成左子树的上限、右子树的下限。执行用时: c++ 8m...原创 2018-11-22 21:04:41 · 214 阅读 · 0 评论 -
leetcode 242. 有效的字母异位词 Valid Anagram(使用c++/java/python)【使用哈希表】
针对两个字符串分别建立哈希表,key为字母,value为字母出现的次数。 若两个哈希表完全相同,则字符串互为字母异位词。执行用时: c++ 12ms; java 28ms; python 64ms c++class Solution {public: bool isAnagram(string s, string t) { unordered_map&l...原创 2018-12-01 17:09:47 · 483 阅读 · 0 评论 -
leetcode 8. 字符串转换整数 String to Integer (atoi)
先判断空串以及全为空格的情况,返回0,让索引指向第一个非空格字符;判断正号和符号;从索引处开始获取字符,先判断该字符是不是0~9,若不是则跳出循环,若是则将其转换成int型;然后判断当前数后面补上这个数字后会不会溢出,不会溢出时再去补上这个数字。 javaclass Solution { public int myAtoi(String str) { ...原创 2018-12-01 18:38:08 · 799 阅读 · 0 评论 -
leetcode 70. 爬楼梯 Climbing Stairs
动态规划。 将问题分解为子问题: 爬到第n层的总方法f(n) = 爬到第n-1层的总方法f(n-1) + 爬到第n-2层的总方法f(n-2)。边界条件: n=1和n=2时。遍历层数,每次只用三个变量分别保存f(n-2)、f(n-1)、f(n),在遍历过程中更新。 pythonclass Solution: def climbStairs(self, n): ...原创 2018-12-26 16:54:29 · 247 阅读 · 0 评论 -
leetcode 53. 最大子序和 Maximum Subarray
动态规划。 其子问题可以为:以第i个元素为结尾的具有最大和的连续子数组。为此,建立一个与原数组A同样长度的数组B,其每个位置B[i]保存以A[i]为结尾的连续子数组的最大和。数组B中的最大值即为原问题所求。 子问题的递归求解方式:如果B[i-1]>0,则直接将A[i]补在其后就得到了以A[i]为结尾的连续子数组的最大和;否则,说明需要把A[i-1]之前丢掉,仅A[i...原创 2018-12-26 17:16:16 · 211 阅读 · 2 评论 -
leetcode 38. 报数 Count and Say
解法详见注释pythonclass Solution: def countAndSay(self, n): """ :type n: int :rtype: str """ s = '1' if n==1: return s else: ...原创 2018-12-25 10:44:23 · 225 阅读 · 0 评论 -
leetcode 19. 删除链表的倒数第N个节点 Remove Nth Node From End of List
使用双指针法,先将右指针右移N次。这时需要做一个判断,如果右指针已经到末尾,则说明待删除的是倒数第N个节点即第一个节点,直接返回head.next即可。否则,同时移动左指针和右指针,直到右指针达到末尾,此时左指针正好指向待删除节点的前一个位置。 python# Definition for singly-linked list.# class ListNode:# def...原创 2018-12-25 15:23:32 · 366 阅读 · 0 评论 -
leetcode 206. 反转链表 Reverse Linked List
也是用两个指针,左指针prev与右指针head同时向右移动,然后将这两个指针所指节点间的方向进行反向。当循环结束时prev正好指向最后一个节点。 返回该节点即可。 python# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val ...原创 2018-12-25 15:57:55 · 288 阅读 · 0 评论 -
leetcode 234. 回文链表 Palindrome Linked List
将链表的前半部分反转。 然后从中间开始向两边逐节点比较。 利用三个指针,详见注释。 python# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solu...原创 2018-12-25 20:26:20 · 237 阅读 · 0 评论 -
leetcode 141. 环形链表 Linked List Cycle
还是用两个指针,慢指针每次走一步,快指针每次走两步。若链表带环,两个指针必定会相遇。 python# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Nonec...原创 2018-12-26 09:50:27 · 375 阅读 · 0 评论 -
leetcode 88. 合并两个有序数组 Merge Sorted Array
从数组1的末尾开始,每次填充两数组中的最大数。m和n表示两数组中待填充的个数。 pythonclass Solution(object): def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums...原创 2018-12-26 10:44:21 · 301 阅读 · 0 评论 -
回溯专题
回溯算法是一种类似于枚举的深度优先搜索过程,其解空间可以表示成一颗搜索树,叶子节点即为可能满足条件的解,树的一个路径就代表搜索其中一个解的方式。此类问题一般都需要编写一个backtracking函数,用于递归地进行解空间的搜索和判断。 不满足条件时则撤销此次操作,回溯到上一搜索节点。通常至少需要维护两个变量:res保存当前已经找到的所有满足条件的解、temp保存当前正在搜索的解。...原创 2019-03-08 22:34:06 · 237 阅读 · 1 评论 -
leetcode 36. 有效的数独 Valid Sudoku【使用集合】
把每个数字按照其查看规则分别编码成三个字符串。设第i行第j列的数字为n,编码如下:按照行规则: i(n) 按照列规则:(n)j 按照3x3的规则:i/3(n)j/3例如第1行第4列的9被分别编码为"1(9)"、"(9)4"、"0(9)1"(因为它在第(0,1)个3x3的块中)这样的话就可以把每个数字的所有三个编码都放进同一个hashset中进行去重,而互相不影响,就不需要为三种...原创 2018-11-27 22:30:24 · 194 阅读 · 0 评论 -
leetcode 26. 删除排序数组中的重复项 Remove Duplicates from Sorted Array
用一个变量来标识要修改的位置索引,用一个变量来表示参考数字,遍历数组,当出现当前数字跟参考数字不同时则更新位置索引及参考数字。 c++class Solution {public: int removeDuplicates(vector<int>& nums) { int len = nums.size(); if(l...原创 2018-11-27 22:18:16 · 173 阅读 · 0 评论 -
leetcode 101. 对称二叉树 Symmetric Tree(使用c++/java/python)
https://leetcode-cn.com/problems/symmetric-tree/https://leetcode.com/problems/symmetric-tree/递归。利用一个函数判断两颗树是否镜像对称,即需要满足:两树根节点相同 树1的左子树与树2的右子树镜像 树1的右子树与树2的左子树镜像执行用时: c++ 8ms; java 15ms; python...原创 2018-11-22 21:13:12 · 443 阅读 · 0 评论 -
leetcode 102. 二叉树的层次遍历 Binary Tree Level Order Traversal(使用c++/java/python)【使用并总结队列】
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/https://leetcode.com/problems/binary-tree-level-order-traversal/使用队列保存待处理的结点;使用双层vector/list保存每层的结点值。初始状态将根节点入队,然后每次初始化一个单层vect...原创 2018-11-22 21:37:54 · 685 阅读 · 0 评论 -
leetcode 104. 二叉树的最大深度 Maximum Depth of Binary Tree(使用c++/java/python)
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/https://leetcode.com/problems/maximum-depth-of-binary-tree/递归。计算左子树高度和右子树高度的较大者。记得+1。执行用时: c++ 4ms; java 1ms; python 68ms c++...原创 2018-11-22 21:53:56 · 304 阅读 · 0 评论 -
leetcode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree(使用c++/java/python)
https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/递归。用二分法每次将有序数组的中间一个数作为根结点,其左边再用二分法构建左子树,其右边也用二分...原创 2018-11-22 22:00:27 · 270 阅读 · 0 评论 -
leetcode 217. 存在重复元素 Contains Duplicate(使用c++/java/python)【使用集合】
https://leetcode-cn.com/problems/contains-duplicate/https://leetcode.com/problems/contains-duplicate/用set去重。执行用时: c++ 40ms; java 23ms; python 72ms c++class Solution {public: bool con...原创 2018-11-22 22:18:02 · 360 阅读 · 0 评论 -
leetcode 350. 两个数组的交集 II Intersection of Two Arrays II(使用c++/java/python)【使用哈希表】
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/https://leetcode.com/problems/intersection-of-two-arrays-ii/对其中一个数组建立哈希表,key为元素值,value为元素出现的个数。然后遍历另一个数组,查看表中有没有这个数,有则将该数加入结果中,并将valu...原创 2018-11-24 16:27:07 · 266 阅读 · 0 评论 -
leetcode 66. 加一 Plus One
从个位开始,如果该位小于9,则加一后直接返回。 如果等于9,则该位置0,进入下一循环。如果所有位都检查完还没返回的话说明这个数字是全9,于是新建一个比原数组长1位的数组,首位置1,别的置0 javaclass Solution { public int[] plusOne(int[] digits) { int len = digits.length; ...原创 2018-11-28 21:59:44 · 338 阅读 · 0 评论 -
leetcode 136. 只出现一次的数字 Single Number
两个相同的数字异或等于1,任意数字异或0保持不变,因此所有数全部异或就能找到那个数。 python:class Solution: def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ res = 0 ...原创 2018-11-28 22:06:40 · 133 阅读 · 0 评论 -
leetcode 48. 旋转图像 Rotate Image(使用c++/java/python)
先上下翻转,再按主对角线对称。执行用时: c++ 16ms; java 1ms; python 44ms c++class Solution {public: void rotate(vector<vector<int>>& matrix) { reverse(matrix.begin(), matrix.end...原创 2018-11-28 22:30:11 · 478 阅读 · 0 评论 -
leetcode 387. 字符串中的第一个唯一字符 First Unique Character in a String【使用有序哈希表】
建立有序哈希表。遍历字符串,用字符作为key,用一个list作为value,list的两个值分别记录字符出现的次数和第一次出现的位置。 pythonclass Solution: def firstUniqChar(self, s): """ :type s: str :rtype: int """ ...原创 2018-11-29 15:11:30 · 318 阅读 · 0 评论 -
广度优先搜索BFS
迷宫题:给定一个二维矩阵,1表示不能走,0表示能走。再给定一个起点和终点,只可以上下左右,求出最短路径。广度优先搜索依次搜索走1步、走2步、走3步能到的位置,走的路径逐渐增大,到终点时立即返回,所以最终当函数返回时一定是最短路径。from collections import dequedirs = [(-1,0),(1,0),(0,-1),(0,1)] #上下左右arrows...原创 2019-03-14 22:52:16 · 426 阅读 · 0 评论