
leetcode刷题
min_coder
这个作者很懒,什么都没留下…
展开
-
LC496. 下一个更大元素 I
题目给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?思路这道题暴力可以求解,但是对进阶的低时间复杂度要求,做出以下思路:注原创 2021-10-27 10:34:01 · 83 阅读 · 0 评论 -
LC638. 大礼包
题目在 LeetCode 商店中, 有 n 件在售的物品。每件物品都有对应的价格。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。给你一个整数数组 price 表示物品价格,其中 price[i] 是第 i 件物品的价格。另有一个整数数组 needs 表示购物清单,其中 needs[i] 是需要购买第 i 件物品的数量。还有一个数组 special 表示大礼包,special[i] 的长度为 n + 1 ,其中 special[i][j] 表示第 i 个大礼包中内含第 j 件物品的数量,原创 2021-10-24 20:51:38 · 205 阅读 · 0 评论 -
LC453. 最小操作次数使数组元素相等
题目给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。n == nums.length1 <= nums.length <= 105-109 <= nums[i] <= 109答案保证符合 32-bit 整数思路反向思考把所有数加到相同值==把所有数减到相同值代码class Solution {public: int minMoves(vector<int>& num原创 2021-10-20 12:21:43 · 151 阅读 · 0 评论 -
LC211. 添加与搜索单词 - 数据结构设计
题目请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。实现词典类 WordDictionary :WordDictionary() 初始化词典对象void addWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则,返回 false 。word 中可能包含一些 '.' ,每个 . 都可以表示任何一个字母。1 <= word.原创 2021-10-19 21:33:29 · 126 阅读 · 0 评论 -
LC282. 给表达式添加运算符
题目给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。1 <= num.length <= 10num 仅含数字-2^31 <= target <= 2^31 - 1思路首先根据题目要求,可以发现,加入运算符的位置和类型是随机的,也就是说运算的数字可以是一位的, 也可以是很多位的。对于如此多选择的情况,没有规律可循,需要采用递归枚举采原创 2021-10-18 18:19:23 · 165 阅读 · 0 评论 -
LC230. 二叉搜索树中第K小的元素
题目给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。树中的节点数为 n 。1 <= k <= n <= 1040 <= Node.val <= 104思路可以采用中序遍历的方式,先遍历左子节点,然后是父亲节点,最后是右子节点。从最小的左子节点开始计数,依次遍历,当计数到k时输出即可代码/** * Definition for a binary tree node. * struc原创 2021-10-17 20:41:08 · 62 阅读 · 0 评论 -
LC29.两数相除
题目给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2要求:被除数和除数均为 32 位有符号整数。除数不为 0。假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 -1]。本题中,如原创 2021-10-12 20:46:05 · 100 阅读 · 0 评论 -
LC166. 分数到小数
题目给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。-2^31 <= numerator, denominator <= 2^31 - 1denominator != 0思路这是一道典型的模拟题,可以选用小时候刚学除法时候的思路求解用除数和被除数相除,整数加入字符串,原创 2021-10-07 21:52:22 · 97 阅读 · 0 评论 -
LC415. 字符串相加
问题给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。思路因为是字符串形式,不能转换成int型直接加减,会溢出。需要将两个字符串从最后一位开始依次提出来加减。注:不要忘记每一次位相加产生的进位题目很简单,但是具体忘记string的append方式,在此记录一下代码class Solution {public: string addStrings(string num1, string num2) { int i = num1.原创 2021-09-28 20:16:31 · 382 阅读 · 0 评论 -
LC238. 除自身以外数组的乘积
题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题进阶:使用常数空间复杂度思路第一次建立两个数组,分别表示nums前缀和后缀的乘积,最后结果将前缀和后缀相乘即可(虽能通过,但是不符合常数空间复杂度)减少空间复杂度,可以将前缀乘积写入结果数组中,然后从后向前循环用一个整数变量得到后缀乘积,并相乘。代原创 2021-09-26 18:50:59 · 105 阅读 · 0 评论 -
LC435. 无重叠区间
题目给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。思路类似于排除最小数,采用贪心算法开始先进行排序代码class Solution {public: int eraseOverlapIntervals(v原创 2021-09-25 18:20:13 · 168 阅读 · 0 评论 -
LC706. 设计哈希映射
题目不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key) 如果映射中存在 k原创 2021-09-22 20:55:48 · 223 阅读 · 0 评论 -
寻找多于一半的元素
题目给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。思路可以创建一个新的数组用于存储每个数字出现次数若想降低空间复杂度,可以使用将数组中不同的数同归于尽,最后剩下的数就是最多的数代码class Solution {public: int majorityElement(vector<int>& nums) { int count原创 2021-09-16 09:57:35 · 85 阅读 · 0 评论