快来刷题
文章平均质量分 62
分享刷题
林林林ZEYU
坚持
展开
-
1060- 礼物的最大价值
题目如下在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物解题方法1class Solution {public: int maxValue(ve原创 2022-03-25 17:24:04 · 1262 阅读 · 2 评论 -
1059-前 n 个数字二进制中 1 的个数
题目如下给定一个非负整数 n ,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组。示例 1:输入: n = 2输出: [0,1,1]解释:0 --> 01 --> 12 --> 10示例 2:输入: n = 5输出: [0,1,1,2,1,2]解释:0 --> 01 --> 12 --> 103 --> 114 --> 1005 --> 101这道题需要计算从 0 到 n 的每个整数的二进原创 2022-03-25 10:41:02 · 1669 阅读 · 0 评论 -
1058-加减的目标值
题目如下给定一个正整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为原创 2022-03-24 22:10:02 · 568 阅读 · 0 评论 -
1057-插入、删除和随机访问都是 O(1) 的容器
题目如下设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构:insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false 。remove(val):当元素 val 存在时返回 true ,并从集合中移除该项,否则返回 false 。getRandom:随机返回现有集合中的一项。每个元素应该有 相同的概率 被返回。解题思路思路——————哈希表 + 数组由于题目要求删除和插入的时间复杂度为 O(1),能够满足要求的只有哈希表,显然原创 2022-03-24 21:08:46 · 1366 阅读 · 0 评论 -
1056-排序数组中只出现一次的数字
题目如下给定一个只包含整数的有序数组 nums ,每个元素都会出现两次,唯有一个数只会出现一次,请找出这个唯一的数字。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10解题方法1思路和算法假设只出现一次的元素位于下标 x,由于其余每个元素都出现两次,因此下标 x 的左边和右边都有偶数个元素,数组的长度是奇数。由于数组是有序的,因此数组中相同的元素一定相邻。对于下标 x 左边的原创 2022-03-24 11:51:38 · 358 阅读 · 0 评论 -
1055-值和下标之差都在给定的范围内
题目如下给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例 1:输入:nums = [1,2,3,1], k = 3, t = 0输出:true示例 2:输入:nums = [1,0,1,1], k = 1, t = 2输出:true示例 3:输入:nums = [1原创 2022-03-23 12:34:10 · 257 阅读 · 0 评论 -
1054-按权重生成随机数
题目如下给定一个正整数数组 w ,其中 w[i] 代表下标 i 的权重(下标从 0 开始),请写一个函数 pickIndex ,它可以随机地获取下标 i,选取下标 i 的概率与 w[i] 成正比。例如,对于 w = [1, 3],挑选下标 0 的概率为 1 / (1 + 3) = 0.25 (即,25%),而选取下标 1 的概率为 3 / (1 + 3) = 0.75(即,75%)。也就是说,选取下标 i 的概率为 w[i] / sum(w) 。示例 1:输入:inputs = [“Soluti原创 2022-03-23 12:23:24 · 278 阅读 · 0 评论 -
1053-省份数量
题目如下有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。示例 1:输入:isConn原创 2022-03-22 21:51:57 · 191 阅读 · 0 评论 -
1052-狒狒吃香蕉
题目如下狒狒喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。狒狒可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: piles = [3,原创 2022-03-22 20:59:39 · 1418 阅读 · 0 评论 -
1051-粉刷房子
题目如下假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的正整数矩阵 costs 来表示的。例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请计算出粉刷完所有房子最少的花费成本。示例原创 2022-03-22 13:18:46 · 204 阅读 · 0 评论 -
1047-翻转字符
题目如下如果一个由 ‘0’ 和 ‘1’ 组成的字符串,是以一些 ‘0’(可能没有 ‘0’)后面跟着一些 ‘1’(也可能没有 ‘1’)的形式组成的,那么该字符串是 单调递增 的。我们给出一个由字符 ‘0’ 和 ‘1’ 组成的字符串 s,我们可以将任何 ‘0’ 翻转为 ‘1’ 或者将 ‘1’ 翻转为 ‘0’。返回使 s 单调递增 的最小翻转次数。示例 1:输入:s = “00110”输出:1解释:我们翻转最后一位得到 00111.示例 2:输入:s = “010110”输出:2解释:我们翻原创 2022-03-21 22:03:16 · 793 阅读 · 0 评论 -
1046-最小时间差
题目如下给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。示例 1:输入:timePoints = [“23:59”,“00:00”]输出:1示例 2:输入:timePoints = [“00:00”,“23:59”,“00:00”]输出:0解题方法我们注意到,时间点最多只有 24 * 60 个,因此,当 timePoints 长度超过 24 * 60,说明有重复的时间点,提前返回 0。接下来:首先,遍历时间列表,将其转换原创 2022-03-21 21:38:52 · 218 阅读 · 0 评论 -
1045-小行星碰撞
题目如下给定一个整数数组 asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。示例 1:输入:asteroids = [5,10,-5]输出:[5,10]解释:10 和 -5 碰撞后只剩下 10 。 5 和 1原创 2022-03-21 20:51:03 · 345 阅读 · 0 评论 -
1044-最长斐波那契数列
题目如下如果序列 X_1, X_2, …, X_n 满足下列条件,就说它是 斐波那契式 的:n >= 3对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列 arr ,找到 arr 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 0 。(回想一下,子序列是从原序列 arr 中派生出来的,它从 arr 中删掉任意数量的元素(也可以不删),而不改变其余元素的顺序。例如, [3, 5, 8] 是 [3, 4, 5原创 2022-03-21 13:11:39 · 1248 阅读 · 0 评论 -
1043-矩阵中的距离
题目如下给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]示例 2:输入:mat = [[0,0,0],[0,1,0],[1,1,1]]输出:[[0,0,0],[0,1,0],[1,2,1]]解题思路广度优先搜索矩阵可以看作是无权图,该问原创 2022-03-20 22:57:12 · 826 阅读 · 0 评论 -
1042-最大的异或
题目如下给定一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 。示例 1:输入:nums = [3,10,5,25,2,8]输出:28解释:最大运算结果是 5 XOR 25 = 28.示例 2:输入:nums = [0]输出:0示例 3:输入:nums = [2,4]输出:6示例 4:输入:nums = [8,10,2]输出:10示例 5:输入:nums = [14,70,53,83,49,91,3原创 2022-03-20 18:29:28 · 326 阅读 · 0 评论 -
1041-不含重复字符的最长子字符串
题目如下示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子字符串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子字符串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。示例 4:输入: s = “”输出:原创 2022-03-20 18:17:03 · 442 阅读 · 0 评论 -
1040-有效的变位词
题目如下给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false示例 3:输入: s = “a”, t = “a”输出: false方法一:排序t 是 s 的变位词等价于「两个字原创 2022-03-20 11:02:02 · 360 阅读 · 0 评论 -
1039-二维子矩阵的和
题目如下给定一个二维矩阵 matrix,以下类型的多个请求:计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。实现 NumMatrix 类:NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化int sumRegion(int row1, int col1, int row2, int col2) 返回左上角 (row1, col1) 、右下角 (row2, col2) 的子矩阵的元素总和。示原创 2022-03-19 18:20:59 · 310 阅读 · 0 评论 -
1038-字符串中的所有变位词
题目如下给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。变位词 指字母相同,但排列不同的字符串。解题思路思想:1.数组滑动窗口长度为p串的长度,在s中不停滑动,满足要求就存头部索引值2.字母只有26个用数组代替hashmap,key为1-26字母,value为串中字母出现的频次解题代码class Solution {public: vector<int> findAnagrams(string s,原创 2022-03-19 18:02:57 · 269 阅读 · 0 评论 -
1037-含有所有字符的最短字符串
题目如下给定两个字符串 s 和 t 。返回 s 中包含 t 的所有字符的最短子字符串。如果 s 中不存在符合条件的子字符串,则返回空字符串 “” 。如果 s 中存在多个符合条件的子字符串,返回任意一个。注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”解释:最短子字符串 “BANC” 包含了字符串 t 的所有字符 ‘A’、‘B’、‘C’示例 2:输入:s =原创 2022-03-19 17:44:27 · 588 阅读 · 0 评论 -
1036-0 和 1 个数相同的子数组
题目如下给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。解题思路前缀和 + 哈希表由于「0 和 1 的数量相同」等价于「1 的数量减去 0 的数量等于 0」,我们可原创 2022-03-19 11:05:10 · 141 阅读 · 0 评论 -
1035-和大于等于 target 的最短子数组
题目如下给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3原创 2022-03-18 21:34:21 · 183 阅读 · 0 评论 -
1034-乘积小于 K 的子数组
题目如下给定一个正整数数组 nums和整数 k ,请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8 个乘积小于 100 的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0解题思路1.要用滑窗这个思原创 2022-03-18 20:07:53 · 605 阅读 · 0 评论 -
1033-字符串中的变位词
题目如下给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例 2:输入: s1= “ab” s2 = “eidboaoo”输出: False解题方法1滑动窗口class Solution{public: bool checkInclusion原创 2022-03-17 21:32:14 · 557 阅读 · 0 评论 -
1032-左右两边子数组的和相等
题目如下给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。解题思路和代码前缀和class Solution {public: int pivotIndex(vector<原创 2022-03-17 21:02:23 · 590 阅读 · 0 评论