leetCode
大小瓶
这个作者很懒,什么都没留下…
展开
-
无重复字符的最长子串
题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。(longest-substring-without-repeating-characters) 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 思路: 窗口长度不固定,先固定窗口左端,移动右端,直到找到有重复字符的窗口,记录窗口长度; 然后固定右端,移动左端,直到窗口无重复字符,记录最大长度,窗口再开始移动右端 到右端在最右端且窗口无重复字符,此时最大窗口长原创 2020-06-26 18:14:43 · 99 阅读 · 0 评论 -
两数相加
题目描述: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 思路: 给一个变量表示当前数字之和,根据这个数的个原创 2020-06-06 23:21:24 · 123 阅读 · 0 评论 -
合并两个有序链表
题目描述: 将两个升序链表合并为一个新的升序链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路: 定义新链表,比较l1,l2的值的大小,较小的接入新链表,并更新原l1或l2(删掉较小节点),新链表当前节点后移到新的最后节点 代码: # # @lc app=leetcode.cn id=21 lang=python3 # # [21] 合并两个原创 2020-05-17 01:23:25 · 75 阅读 · 0 评论 -
旋转数组
题目描述: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例: 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 思路: k可能大于nums的长度,所以k%=len(nums) 把后k个元素移到前面来 代码: # # @lc app=leetcode.cn id=189 lang=python3 #原创 2020-05-17 00:41:39 · 235 阅读 · 0 评论 -
删除排序数组中的重复项
题目描述: 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例: 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新原创 2020-05-16 23:58:53 · 89 阅读 · 0 评论 -
K 个一组翻转链表
题目描述: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 思路: 把链表分为k个一组,每组进行翻转,不足k个时保持原顺序原创 2020-05-16 17:16:44 · 84 阅读 · 0 评论 -
移动零解法
题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 思路: 使用两个指针: i --> 当前遍历的元素下标 j --> 实际不为0的元素下标 if i != j and nums[i] != 0: nums[j] = nums[i] nums[i] = 0 代码: # # @lc app=原创 2020-05-15 14:51:22 · 161 阅读 · 1 评论 -
反转链表
题目描述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路: head每次删去头节点 newListNode每次加入头节点 代码: # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # @lc code=start # Definition for singly-linked list. #原创 2020-05-15 14:42:27 · 95 阅读 · 0 评论 -
环形链表 II
题目描述: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 思路: 设链表共有 a+b 个节点 其中链表头部到链表入口有 a 个节点(不计链表入口节点),链表环有 b 个节点 if fast = slow : f = 2s (f每次走2个节点,s每次走1个节点) f = s + nb (f比s多走nb个节点) 可以推出 --> s = nb 遇到入口节点时: 走过的节点数k为: k = a + nb --> 即原创 2020-05-15 14:35:42 · 119 阅读 · 0 评论 -
环形链表
题目描述: 给定一个链表,判断链表中是否有环。 思路: 这道题很像中学物理中我们经常遇到的“追击问题”, 所以我们可以巧妙的使用快慢指针来模拟追击问题, 只要存在环状结构,就一定可以追上。 代码: # # @lc app=leetcode.cn id=141 lang=python3 # # [141] 环形链表 # # @lc code=start # Definition for singly-linked list. # class ListNode: # def __init__(s原创 2020-05-15 14:32:36 · 104 阅读 · 0 评论 -
爬楼梯
题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 示例: n=3时,有3种方法 思路: 假设f(n)表示到达楼顶的方法数 则f(n) = f(n-1) + f(n-2) 即斐波那契数列 代码: # # @lc app=leetcode.cn id=70 lang=python3 # # [70] 爬楼梯 # # @lc code=start # 假设你正在爬楼梯。需要 n 阶你才原创 2020-05-15 14:28:53 · 114 阅读 · 0 评论 -
两两交换链表中的节点
题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3 思路: 对于四个节点的链表(交换a,b节点时的变化步骤): s -> a -> b -> e s -> b -> e a -> b -> e s -> b -> e a -&g原创 2020-05-15 13:39:31 · 106 阅读 · 0 评论 -
三数之和
题目描述: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c,使得 a + b + c = 0 ? 请你找出所有满足条件且不重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]] 思路: 先给nums排序,设置3个指针: i-->从0开始向右移动 left-->从i+1开始向右移动 right-->从左后元素开始向左移动原创 2020-05-15 13:26:57 · 128 阅读 · 0 评论 -
盛最多水的容器
题目描述: 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 2。 示例: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 思路: 使用双指针的方法,时间复杂度O(n),从左右两端向中间夹逼,移动较短的柱子(容器 的高取决于较原创 2020-05-15 13:14:08 · 187 阅读 · 1 评论 -
两数之和
这里写目录标题两数之和题目描述:示例:思路: 两数之和 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 思路: 使用map存储target - num的值和原创 2020-05-15 12:59:36 · 91 阅读 · 0 评论