04 2020 档案
摘要:双指针法 思路: 参考三数之和,在外面多嵌套一层 代码: class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: if len(nums) < 4: return [] output =
阅读全文
摘要:回溯法 思路: 通过回溯的思维,递归调用枚举出所有可能。 class Solution: def letterCombinations(self, digits): phone = {'2': ['a', 'b', 'c'], '3': ['d', 'e', 'f'], '4': ['g', 'h'
阅读全文
摘要:1.暴力法 思路: 遍历枚举出每一种情况,找到最接近的。 代码: class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: minCom = abs(nums[0] + nums[1] + nums
阅读全文
摘要:双指针法 思路: 首先对原数组进行排序,然后从头开始遍历,当遇到nums[i]>0时终止。在遍历过程中,对遍历元素i后面剩余子数组首尾添加指针L和R,通过移动LR找到满足题设条件的[i,L,R]。这里要注意的是,为了避免重复的情况,在遍历过程中,如果遍历的元素nums[i]和它之前元素nums[i-
阅读全文
摘要:1.水平扫描法 思路: 若存在最长公共前缀,即数组中每个字符串均包含公共前缀。于是可以先找出一个公共前缀,然后按顺序比较,对找到的公共前缀进行删减处理,知道最后得到最长的公共前缀。 例如: ["ababcc","ababd","abad","ac"] ①ababcc和ababd比较,得到公共前缀为a
阅读全文
摘要:贪心算法 思路 所谓贪心算法就是我们在寻找整体最优解的情况下,先找到局部最优解。 例如: 12 可以多种组合表示 12 = 10 + 1 + 1 -> XII 12 = 9 + 1 + 1 + 1 -> IXIII 12 = 5 + 5 + 1 + 1 -> VVII 12 = 5 + 4 + 1
阅读全文
摘要:1.暴力法 思路: 找出每个子区间,计算出面积,找出最大值 代码: class Solution: def maxArea(self, height: List[int]) -> int: areamax = 0 for i in range(len(height)): for k in range
阅读全文
摘要:1.回溯法 思路: 首先考虑如果模式串中没有 * 号,那么我们只需要从左向右检查模式串每个字符是否能匹配匹配串中的每一个字符。在匹配字符时,如果当前模式串中字符为 . 或者与匹配串对应字符相等均为通过。 例如: 匹配串为:abc 模式串为: a.c 从左向右匹配,返回true 接下来讨论如果模式串中
阅读全文
摘要:1.整数转字符串 思路: 将整数变为字符串,然后翻转字符串,如果翻转后的字符串和原字符串一致,则为回文数。 例如: 123 -> '123' ,翻转后 '321',因为'321' != '123',所以不是回文数 202 -> '202' , 翻转后'202',因为'202' == '202',所以
阅读全文
摘要:DFA法 思路: DFA即Deterministic Finite Automaton,也就是确定的有穷自动机,通过当前状态和要发生的事务获取到下一个状态。 在本题中,我们可以发现在遍历字符串字符时,可能出现的4种类型:① 空格 ② 正负号 ③ 数字 ④ 无效字符 。初始化一个当前状态,在处理每种类
阅读全文
摘要:1.整除取余 思路: 对原整数循环对10取余和整除,然后进行拼接。这里需要注意的时,在整除时要考虑如果原整数大于最大值或者小于最小值的情况。 例如: 原整数 x = 123 翻转后整数 new_x = 0 余数为 p ① x != 0 则 p = x%10 = 123%10 = 3,x = x //
阅读全文
摘要:1.找规律 思路: 对原字符串进行分块处理,找到每块中数字在Z形变化后的对应关系。 例如: 通过观察发现可以以Z型的头和身为块进行分块。即 [L E E T C O] [D E I S H I] [R I N G] 每块的数量等于行数的二倍减去2。即 4 * 2 - 2 = 6 这里可以发现每块中的
阅读全文
摘要:1.暴力法 思路: 循环遍历每一个子串,对每个子串进行判断,判断的方法为翻转子串和原子串进行对比,如果一致则为回文子串。 例如: abcb 可以看出最长的回文子串为bcb 代码: class Solution: def longestPalindrome(self, s: str) -> str:
阅读全文
摘要:代码: 思路: 中位数首先要考虑数组长度奇偶性问题,如果数组长度n是奇数,则中位数为数组第(n//2+1)个数。如果长度n为偶数,则中位数为数组第n//2个数和(n//2+1)个数的平均数。 例如: [1,3,5] 中位数为第(3//2+1)=2个数,即3 [1,3,4,5] 中位数为第(4//2)
阅读全文
摘要:双指针法 思路: 指针j向前移动遍历字符串,使用字典记录j所指的字符和位置,指针i负责记录当前不含重复字符的起始位置,每当j指向的字符在字典中可以找到时,更新指针i的位置和对应字符的位置,则不含重复字符的子串长度为j-i+1,找到最大值即可。 例如: abaabcba 代码: class Solut
阅读全文
摘要:初等数学 思路: 遍历节点相加,用一个变量carry记录每个节点相加是否要进位,则节点相加对10取余,为新的链表对应节点的值,节点相加对10进行整除为carry的值。遍历相加完成后,如果carry值不为0,添加一个新节点,值为1。 代码: # Definition for singly-linked
阅读全文
摘要:暴力法 思路: 循环枚举出所有可能。 代码: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i+1,len(
阅读全文

浙公网安备 33010602011771号