Leetcode
蓝礼
这个作者很懒,什么都没留下…
展开
-
19. 删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。给定的链表的头结点是第一个结点(有值)。两次遍历算法最简单的方法,但实现并不简单,对于只有一个结点的情况很难处理(的优雅),所以这个时候我们应该考虑用头结点(第一个结点前),然后返回的时候我们也用头结点来返回(dummy.next),一定用统一,可读性和正确性才能够得到保证。 ListNode* removeNt...原创 2019-11-18 14:17:38 · 95 阅读 · 0 评论 -
14. 最长公共前缀(重点)
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。水平扫描复杂度O(s) s = n+m*n,m为公共子串注意:外循环的次数是最短串的长度,所以最开始找最短串就已经花费O(n)第一点没法用异常处理和逻辑短路处理,因为几个地方都用到了count,但是各个地方出错(逻辑或语法)的原因不一样,所以没法统一 def longestCommo...原创 2019-11-18 12:15:39 · 100 阅读 · 0 评论 -
38. 报数
题目报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:11121121111221分类讨论写的很笨,却意外的击败了99%思路如下:外面的for循环控制次数,里面的for循环用来遍历上次的结果,pre和res分别存这次和上次的结果,curr存的是目前讨论的值,具体讨论如下:当n=1或n=0需要独立讨论当遍历pre时,我们只需要考虑现在是否和...原创 2019-11-15 22:29:30 · 102 阅读 · 0 评论 -
28. 实现 strStr() 未写完!!!!!
题目实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。当然面试不这么写了哈哈哈,击败99% def strStr(self, haystack: str, needle: str) -> int: ret...原创 2019-11-15 22:03:48 · 96 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
题目自己写的,比较直接:1.题目说了除了空格的第一个字符只能是符号和数字2.要判断是否溢出3.注意负数的取整(默认向下取整,但是负数需向上取整)4.利用flag来控制正负(完全可以优化)def myAtoi(self, ss: str) -> int: s = ss.lstrip() if not s: return 0 if s[...原创 2019-11-13 12:12:17 · 110 阅读 · 0 评论 -
125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。双指针无论是时间复杂度还是空间复杂度都比用栈好 def isPalindrome(self, s: str) -> bool: l = 0 r = len(s)-1 while l < r: ...原创 2019-11-13 10:40:26 · 83 阅读 · 0 评论 -
242. 有效的字母异位词
题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。桶思想,但只有70% def isAnagram(self, s: str, t: str) -> bool: if len(s)!= len(t): return False in_s = [0]*26 in_t = [0]*26 ...原创 2019-11-13 10:03:25 · 128 阅读 · 0 评论 -
387. 字符串中的第一个唯一字符
题目给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。自己写的,复杂度一样但是比官方慢 60% def firstUniqChar(self, s: str) -> int: hash_table = {} for i in range(len(s)): if s[i] in hash_t...原创 2019-11-12 17:41:28 · 79 阅读 · 0 评论 -
36. 有效的数独
题目:判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。哈希def isValidSudoku(self, board: List[List[str]]) -&...原创 2019-11-06 13:24:13 · 91 阅读 · 0 评论 -
1.两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。哈希表每次算差值,然后在表中差有没有,有的话则为答案,没有就将元素插入表中,值为对应的索引。时间复杂度:O(n) 哈希的查找是常数级别的空间复杂度:O(n)vector<in...原创 2019-11-05 01:37:09 · 83 阅读 · 0 评论 -
5247. 交换字符使得字符串相同
比赛时写的,比较傻def minimumSwap(self, s1: str, s2: str) -> int: diff = [] xy = 0 yx = 0 num = 0 for i in range(len(s1)): if s1[i] != s2[i]: ...原创 2019-11-03 11:49:05 · 193 阅读 · 0 评论 -
189. 旋转数组
题目给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。考研题,先全部翻转,再反转前k个,再反转后面的def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. "...原创 2019-11-03 01:10:08 · 68 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。峰谷法关键是我们需要考虑到紧跟谷的每一个峰值以最大化利润。如果我们试图跳过其中一个峰值来获取更多利润,那么我们最终将失去其中一笔交易中获得的利润,从而导致总利润的降...原创 2019-11-02 01:38:29 · 70 阅读 · 0 评论 -
22. 括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。暴力def generateParenthesis(self, n): def generate(A = []): if len(A) == 2*n: if valid(A): ans.a...原创 2019-11-01 00:39:41 · 65 阅读 · 0 评论 -
46. 全排列
题目给定一个没有重复数字的序列,返回其所有可能的全排列。库函数def permute(self, nums: List[int]) -> List[List[int]]: # 注意permutations是根据位置进行排列,所以若题目没有"无重复"条件的话需要set先 return list(itertools.permutations(nums, len(nums...原创 2019-10-31 23:51:53 · 65 阅读 · 0 评论 -
338. 比特位计数
题目给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。思路一:奇偶判断对于奇数,一定比上一个多1,以为就多了一个最低位;对于偶数,和他的一半的个数相等,对于非负数除二相当于>>1,二偶数最低位一定为0,所以汉明权重(1的个数)一定不变。vector<int> countBits(int...原创 2019-10-30 19:27:08 · 83 阅读 · 0 评论 -
78. 子集(画重点)
题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。使用库函数def subsets(self, nums: List[int]) -> List[List[int]]: res = [] for i in range(len(nums)+1): for tmp in itertools.combina...原创 2019-10-29 01:12:12 · 113 阅读 · 0 评论 -
581. 最短无序连续子数组
题目题目描述:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。直接看代码胜过千言万语int findUnsortedSubarray(vector<int>& nums) { //此解法参考英文官方LeetCode上的讨论 //从左到右...原创 2019-10-26 01:18:36 · 385 阅读 · 0 评论 -
234. 回文链表 快慢指针
题目请判断一个链表是否为回文链表:时间复杂度O(n)空间复杂度O(1)快慢指针快慢指针非常适合这种有中点的问题,并且在移动快慢指针的过程,将原有的链表拆成了两部分(注意:对原链表进行了操作,若为工程不该这么做,但是题目要求空间复杂度O(1)),然后再往后逐一比较。注意点:头插法奇偶情况不同def isPalindrome(self, head: ListNode) ->...原创 2019-10-24 11:14:22 · 285 阅读 · 0 评论 -
543.二叉树的直径
题目方法 1:深度优先搜索任意一条路径可以被写成两个 箭头(不同方向),每个箭头代表一条从某些点向下遍历到孩子节点的路径。假设我们知道对于每个节点最长箭头距离分别为 L, R,那么最优路径经过 L + R + 1 个节点。按照常用方法计算一个节点的深度:max(depth of node.left, depth of node.right) + 1。在计算的同时,经过这个节点的路径长度为 ...原创 2019-10-23 01:40:26 · 85 阅读 · 0 评论 -
437. 路径总和 III 二叉树
题目 题目描述:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束, 但是路径方向必须是向下(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。递归双重递归,比较navie的方法,复杂度高达O(n^2)class Solution {publ...原创 2019-10-23 00:50:41 · 187 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
题目给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。不算正解,但这很pythondef findDisappearedNumbers(nums)...原创 2019-10-22 00:57:44 · 101 阅读 · 0 评论 -
283 移动零 数组变换
题目题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。憨憨方法# 憨到了极限def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. ...原创 2019-10-20 13:23:01 · 102 阅读 · 0 评论 -
266 反转链表
题目 官方题解题目描述:反转一个单链表。迭代需要一个temp值,让其存储下一个,然后再本次循环的最后将其赋给curr实现循环。中间过程实际是有两条链表了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(...原创 2019-10-20 10:48:29 · 80 阅读 · 0 评论 -
226翻转二叉树
题目def invertTree(self, root: TreeNode) -> TreeNode: if root != None: root.left, root.right = self.invertTree(root.right), self.invertTree(root.left) else: ...原创 2019-10-19 01:58:13 · 69 阅读 · 0 评论 -
461 二进制
题目题目描述:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。def hammingDistance(self, x: int, y: int) -> int: return bin(x^y).count('1')def hammingDistance(self, x: int, y: int) -...原创 2019-10-19 01:38:20 · 328 阅读 · 0 评论 -
617合并二叉树
题目题目描述:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode: ...原创 2019-10-19 01:13:27 · 82 阅读 · 0 评论 -
169 求众数 哈希 分治 投票
题目 题解题目描述:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。哈希:时间复杂度:O(n)空间复杂度:O(n)class Solution: def majorityElement(self, nums: List[int]) -> int: dic =...原创 2019-10-19 00:04:56 · 165 阅读 · 0 评论 -
136 哈希 位操作
题目描述&官方题解方法 1:列表操作遍历 nums 中的每一个元素如果某个 \text{nums}nums 中的数字是新出现的,则将它添加到列表中如果某个数字已经在列表中,删除它def singleNumber(self, nums): """ :type nums: List[int] :rtype: int ""...原创 2019-10-15 23:03:28 · 90 阅读 · 0 评论 -
DFS和BFS
DFS和BFS参考文章深度优先搜索DFS深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续...原创 2019-10-14 19:36:04 · 237 阅读 · 0 评论 -
牛顿-莱布尼茨公式在程序设计中的简单运用
参考在程序设计,我们所用的都是离散的,这给我们一种思路,比如,求a和d的差,可以想成积分,即求和:d-a=(d-c)+(c-b)+(b-a)Leetcode 121题.买股票的最佳时候给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。int maxProfit(vector<...原创 2019-10-15 01:21:05 · 1243 阅读 · 0 评论