随笔分类 - 力扣
摘要:1.题目介绍 假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台机器而言,创建合金需要 composition[i][j] 份 j 类型金属。最初,
阅读全文
摘要:1.题目介绍 2.题解 2.1 二分查找(递归实现) 思路 利用递归+二分查找实现对于目标数target索引位置(存在)或者插入位置的索引(不存在) 1.递归返回条件: left > right,在通过二分法寻找到最接近target的值nums[mid]依旧不等于target,也就是left ==
阅读全文
摘要:1.题目介绍 2.题解 2.1 枚举 思路 这里你只要知道 num % 2 相当于是取到二进制最后一位, num / 2 是将二进制整体向右推移一位即可 代码 class Solution { public: int sumIndicesWithKSetBits(vector<int>& nums,
阅读全文
摘要:1.题目介绍 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为
阅读全文
摘要:1.题目介绍 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] he
阅读全文
摘要:1.题目介绍 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 输入:n = 1 输出:["()"] 提示: 1
阅读全文
摘要:1.题目介绍 2.题解 2.1 双层循环 思路 注意到这里:s1 = s0 + 1 。所以是以较小数开始的,极大简化了题目难度 接下来我们便可以通过数组长度进行判断了: 若是偶数,比如像3,4,3,4, 此时必有 4 - 3 = 1,即 偶数的时候应该检验1 而若是奇数,比如像3,4,3, 此时必有
阅读全文
摘要:1.题目介绍 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是 [0, 10^8] 2.题解
阅读全文
摘要:1.题目介绍 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums = [1,2,0] 输出:3 示例 2: 输入:nums = [3,4,-1,1] 输出:2 示例 3: 输入
阅读全文
摘要:1.题目介绍 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获
阅读全文
摘要:1.题目介绍 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除法,且在 O(n) 时间复杂度
阅读全文
摘要:1.题目介绍 2.题解 本题的方法被称为「快速幂算法」,有递归和迭代两个版本。这篇题解会从递归版本的开始讲起,再逐步引出迭代的版本。 当指数 n为负数时,我们可以计算 x^-n再取倒数得到结果,因此我们只需要考虑 n 为自然数的情况。 2.1 模拟(不推荐,时间复杂度过高) 思路 分为n>=0, n
阅读全文
摘要:1.题目介绍 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案 示例 2: 输入:s = "cbbd" 输出:"bb" 2.题解 2.1
阅读全文
摘要:1.题目介绍 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 例
阅读全文
摘要:1.题目介绍 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head = [4,2,1,3] 输出:[1,2,3,4] 2.题解 在147.对链表进行插入排序中我们使用插入排序的方式对于链表进行排序 插入排序的时间复杂度是 O(n^2),其中 n 是链
阅读全文
摘要:1.题目介绍 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 2.题解 补充-建堆过程的时间复杂度为O(n)而不是\(O(n
阅读全文
摘要:1.题目介绍 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 2.题解 2.1 归并排序(递归版本) 思路 归并排序利用了分
阅读全文
摘要:1.题目介绍 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 1.插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 2.每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并
阅读全文
摘要:1.题目介绍 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。 示例 1: 输入:nums = [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 1+2, 1
阅读全文
摘要:1.题目介绍 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k = 3 输出:2 提示:
阅读全文