
刷题:leetcode
闲来无事水水题
z_stand
远离颠倒梦想,究竟涅槃
展开
-
leetcode-300 最长上升子序列
题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n^2) 。方法一(暴力法):即针对数组的每一个元素都有两种选择,取或者不取(取...原创 2020-03-12 16:16:33 · 252 阅读 · 0 评论 -
leetcode-152 乘积最大子序列
题目描述:给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。该题目求最大子序列的乘积,参考leetcode-52 最大子序和中的暴力解法,穷举...原创 2020-03-09 15:00:01 · 263 阅读 · 0 评论 -
leetcode-53 最大子序和
题目描述如下:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。方法一(暴力求解):针对数组中的每一个元素,穷举所有的可能性,从中找到以当前元素结尾的最大的元素即可;穷举的过程中维护一个最大值,然...原创 2020-03-09 14:48:06 · 154 阅读 · 0 评论 -
leetcode-440 字典序的第K小数字
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 10^9。示例 :输入:n: 13k: 2输出: 10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。字典排序数的实现可以参考leetcode-386字典排序数即10叉树的形态,数值排列按照 ...原创 2020-02-16 22:07:37 · 561 阅读 · 0 评论 -
leetcode-386 字典序排数
给定一个整数 n, 返回从 1 到 n 的字典顺序。例如,给定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。根据题目描述,所谓字典顺序,即数值按照类似字符串首字母的ASCII大小进行排序那么数值的字典序即为一个十叉树,比如以1为树顶的树状形式如下:1|...原创 2020-02-16 21:43:30 · 379 阅读 · 0 评论 -
leetcode-135 分发糖果
题目描述:老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 ...原创 2020-02-16 15:38:42 · 212 阅读 · 0 评论 -
leetcode-25 K个一组反转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->...原创 2020-02-16 14:48:51 · 213 阅读 · 0 评论 -
leetcode-20 有效的括号匹配
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true方法一:遇到左括号,压栈遇到右括号,弹栈bool isVali...原创 2020-02-16 13:47:54 · 255 阅读 · 0 评论 -
leetcode-2 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ->...原创 2020-02-15 14:05:26 · 130 阅读 · 0 评论 -
leetcode-24 两两交换链表中的节点
题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.方法一(递归):将配对交换过程拆解为多个以两个元素为一对的子问题…n(k-1) -> n(k)->n(k+1)->…假如n(k+...原创 2020-02-15 11:53:40 · 288 阅读 · 0 评论 -
leetcode-452 用最少数量的箭引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend...原创 2020-02-07 21:01:09 · 163 阅读 · 0 评论 -
leetcode-45 跳跃游戏II
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。该...原创 2020-02-07 19:46:31 · 348 阅读 · 0 评论 -
leetcode-55 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总...原创 2020-02-07 15:46:00 · 125 阅读 · 0 评论 -
leetcode-402 移掉K位数组
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = “1432219”, k = 3输出: “1219”解释: 移除掉三个数字 4, 3, 和 2形成一个新的最小的数字 1219。针对该问题,显然很好的解决办法便是贪心从高位开始遍历...原创 2020-02-07 15:07:59 · 199 阅读 · 0 评论 -
leetcode-376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差...原创 2020-02-06 20:37:24 · 229 阅读 · 0 评论 -
leetcode-455 分发饼干
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小...原创 2020-02-06 19:45:34 · 154 阅读 · 0 评论 -
leetcode-295 数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)...原创 2020-02-06 19:32:53 · 176 阅读 · 0 评论 -
leetcode-215 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5该题比较简洁的解法,我们使用堆来完成最小堆:即堆顶为所有元素的最小值我们将堆的大小限制为k,则堆顶即为所有元素中第k大的元素实现如下:int findKthLargest(vector&...原创 2020-02-06 19:08:09 · 187 阅读 · 0 评论 -
leetcode-155 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);m...原创 2020-02-06 18:54:16 · 139 阅读 · 0 评论 -
leetcode-232 用栈实现队列
使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空栈的特点:后入先出队列的特点:先入先出使用一个数据栈,一个辅助栈,我们最终的目的是想要将新添加的元素放入栈低,所以使用辅助栈先将之前的数据栈元素保存起来,将新元素放入空的数据栈,再将辅助栈中的元素重新...原创 2020-02-06 14:13:35 · 238 阅读 · 0 评论 -
leetcode-225 队列实现栈
使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空队列的特点:先入先出栈的特点:后入先出即我们每次添加元素到队列时,想要达到栈的效果,则需要调整当前元素到队列头部方法一:双队列一个临时队列保存push进去的元素,将数据队列元素按序添加到临时队列,再将临时队列所有元素按序添加到数...原创 2020-02-06 13:03:46 · 222 阅读 · 0 评论 -
leetcode-23 合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6方法一:使用vector数组存多个链表的所有节点,进行从小到大的排序,完成后再进行元素的指向,从第一个元素指向最后一个元素b...原创 2020-02-05 20:53:20 · 212 阅读 · 0 评论 -
leetcode-21 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4总体思路是:比较两个链表头节点,较小的插入新链表指针之后,同时较小链表指针向后移动一位实现如下:ListNode* mergeTwoLists(ListN...原创 2020-02-05 20:32:13 · 118 阅读 · 0 评论 -
leetcode-86 分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5使用双指针的方式,各自构造一个大元素的头节点和小元素的头节点,同时...原创 2020-02-05 15:10:49 · 153 阅读 · 0 评论 -
leetcode-142 环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1解释...原创 2020-02-05 14:53:36 · 154 阅读 · 0 评论 -
leetcode-141 环形链表
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。想要确认一个链表是否存在环,快慢指针就非常有优势,快指针必然能够追上慢指针,...原创 2020-02-05 14:23:23 · 140 阅读 · 0 评论 -
leetcode-160 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交...原创 2020-02-05 14:07:29 · 203 阅读 · 0 评论 -
leetcode-92 反转链表II
题目描述如下:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL很明显这个题目是206 反转链表的进阶版需要记录第m-1个节点和第n+1个节点,因为这两...原创 2020-02-05 13:45:21 · 190 阅读 · 0 评论 -
leetcode-206 反转链表
描述如下:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一:原地反转数据结构如下 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x),...原创 2020-02-05 11:00:13 · 220 阅读 · 0 评论