LeetCode
刷题日志
花猪Yuri
debug小王子
展开
-
LeetCode-45-跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: [2,3,1,1,4]输出: 2示例 2:输入: [2,3,0,1,4]输出: 2贪心算法:每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到maxP位置的点)作为下次的起跳点 !在遍历数组时,我们不访问最后一个元素,这是.原创 2021-05-18 19:53:49 · 188 阅读 · 0 评论 -
LeetCode笔记-40-组合总和
给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。39.candidates中的数字可以无限制重复被选取。backtrack步骤如下:剪枝:如果当前tmp数组的和cur已经大于目标target,没必要枚举了,直接return 如果当前tmp数组的和cur正好和目标target相等,找到一个组合,加到结果res中去,并return for循环遍历从index开始的数,选一个数进入下一层递归。因为数可以重复...原创 2021-05-17 10:56:51 · 272 阅读 · 0 评论 -
LeetCode笔记-28-实现strStr()
1 暴力遍历实现strStr()函数。给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1。class Solution: def strStr(self, haystack: str, needle: str) -> int: n = len(haystack) m = len(needle) i =...原创 2021-04-26 21:09:22 · 177 阅读 · 0 评论 -
LeetCode笔记-22-括号生成
数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]使用深度优先搜索遍历所有可能的结果同时括号生成满足两个性质:n对 , 遍历完共有2*n个括号 任何时刻 , 右括号的数量不应该大于左括号class Solution: def generate...原创 2021-04-23 10:37:38 · 78 阅读 · 0 评论 -
LeetCode笔记-19-删除链表倒数第N个结点
双指针法第一和第二个指针间隔N当第一个指针走到N时,第二个指针开始走,这样当第一个指针走完后,第二个指针刚好在倒数第N个位置因为第一个头节点可能是倒数第N个结点导致删除, 定义一个只想head的节点# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = ..原创 2021-04-21 16:13:51 · 118 阅读 · 0 评论 -
LeetCode笔记-17-电话号码的字母组合
电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]class Solution: def letterCombinations(self, digits: str) -> List[str]..原创 2021-04-21 10:55:54 · 76 阅读 · 0 评论 -
LeetCode笔记-16-最近的三数之和
方法一:三重循环遍历时间复杂度O(n**3),超时方法二:双指针法(变为二循环)class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: nums.sort() n = len(nums) best = 10**7 # 根据差值的绝对值来更新答案 def update(cur):原创 2021-04-20 10:45:17 · 108 阅读 · 1 评论