
LeetCode刷题
文章平均质量分 55
对刷的题进行整理,感受算法与程序之美~
魏大明白
一个在程序猿道路一去不复返的小菜鸡~
展开
-
1720. Decode XORed Array
1720. 解码异或后的数组题目描述未知 整数数组 arr 由 n 个非负整数组成。经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] = arr[i] XOR arr[i + 1] 。例如,arr = [1,0,2,1] 经编码后得到 encoded = [1,2,3] 。给你编码后的数组 encoded 和原数组 arr 的第一个元素 first(arr[0])。请解码返回原数组 arr 。可以证明答案存在并且是唯一的。示例 1:输入:enco原创 2021-05-06 09:25:46 · 350 阅读 · 0 评论 -
136.Single Number
136.只出现一次的数字题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题解对于问题中出现重复字眼的问题,我们都可以优先考虑使用hash方法进行求解,这不一定是最优的方法,但一般都可以得到正确的解。输出只出现一次的元素,不需要存储位置、次数之类的信息原创 2021-05-06 09:14:58 · 235 阅读 · 2 评论 -
740. Delete and Earn
740. 删除并获得点数昨天才把打家劫舍问题整理完,没想到今天的每日一题仍然是这类问题。为什么这么说呢,认分析问题就可以发现,只需要一个简单的转换,这个问题就可以转换成 打家劫舍问题。题目描述给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:num原创 2021-05-05 09:41:14 · 169 阅读 · 0 评论 -
413. Arithmetic Slices
413. 等差数列划分这个题目就相当于动态规划的一个变式了,只有深入理解了动态规划,才能容易想到。题目描述数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], …, A[Q - 1], A[Q] 是等差的。并且 P + 1 < Q 。函数要返回数组 A 中所有为等差数组的子数组个数。示例:A =原创 2021-05-03 14:46:49 · 152 阅读 · 0 评论 -
198. House Robber
小偷问题-打家劫舍这个问题同学面试的时候问到过,作为一道动态规划问题,就整理一下吧。题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (原创 2021-05-03 10:22:48 · 140 阅读 · 0 评论 -
70. Climbing Stairs
70. 爬楼梯那么首先使用动态规划的典型题目来演示一下动态规划的操作。题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶题解分析一下问题,原创 2021-05-03 09:42:11 · 160 阅读 · 0 评论 -
27. Remove Element
27.移除元素题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例原创 2021-04-19 09:21:18 · 173 阅读 · 0 评论 -
55. Jump Game
跳跃问题这是一道典型的贪心问题,在最近的华为笔试中遇到了这个问题,现在来整理一下。跳跃问题1题目描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解原创 2021-04-14 20:44:02 · 133 阅读 · 0 评论 -
406. Queue Reconstruction by Height
406. Queue Reconstruction by Height -排列插入问题题目描述假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue原创 2021-04-01 10:46:27 · 244 阅读 · 0 评论 -
665. Non-decreasing Array
665. Non-decreasing Array -数组问题题目描述给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums =原创 2021-03-31 21:48:41 · 235 阅读 · 0 评论 -
股票问题
股票问题①严格来说,股票问题并不都属于贪心问题,但却属于算法题目里边比较经典的一个题型,这里就整理一下吧。121.买卖股票的最佳时机1题目描述[easy]给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]原创 2021-03-29 10:33:43 · 311 阅读 · 2 评论 -
452. Minimum Number of Arrows to Burst Balloons[medium]
452. Minimum Number of Arrows to Burst Balloons-区间问题问题描述在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引原创 2021-03-23 17:01:01 · 221 阅读 · 0 评论 -
605. Can Place Flowers[easy]
605. Can Place Flowers题目描述假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2原创 2021-03-23 11:17:10 · 290 阅读 · 0 评论 -
435. Non-overlapping Intervals[medium]
435. Non-overlapping Intervals -区间问题题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解原创 2021-03-22 20:15:05 · 230 阅读 · 0 评论 -
135. Candy[hard]
135. Candy-分配问题问题描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2原创 2021-03-22 16:42:05 · 140 阅读 · 0 评论 -
455. Assign Cookies[easy]
455. Assign Cookies -分配问题问题描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1原创 2021-03-21 15:18:25 · 136 阅读 · 0 评论 -
感受算法与程序之美
前言写在最开始,之所以整理这个专栏的目的,一方面是为了接下来的实习、秋招、春招做准备,另一方面也为了能够帮自己梳理算法的思路。因为断断续续的也刷了不少的题目,但是却都是硬解,没有一个明确地解题技巧,遇到困难题直接CV,这明显不行。这篇博客呢就作为一个总章,来整理各类型题目吧~与君共勉,希望看到博客的人都能拿到sp。贪心算法贪心算法说白了就是每次寻找局部最优解的过程,已达到最终结果是全局最优的目的。贪心算法一般按如下步骤进行:①建立数学模型来描述问题②把求解的问题分成若干个子问题③对每个子问题原创 2021-03-21 15:09:56 · 285 阅读 · 0 评论