力扣、算法
文章平均质量分 52
数据结构与算法的内容
以及力扣题目的解析
CodeStars码星人
CodeMoon,学习不可能永远都是一件很快乐的事,但也不会很痛苦。
展开
-
leetcode 338 Counting Bits and Brian Kernighan 算法
338. Counting BitsdescriptionGiven an integer n, return an array ans of length n + 1 such that for each i (0 <= i <= n), ans[i] is the number of 1’s in the binary representation of i.Example 1:Input: n = 2Output: [0,1,1]Explanation:0 --> 0原创 2022-05-30 23:49:20 · 130 阅读 · 0 评论 -
力扣刷题——双指针法
题目题目链接给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2: 给定 nums = [0,1,2,2,3,原创 2021-12-16 20:50:45 · 166 阅读 · 0 评论 -
力扣刷题——贪心 455题 分发饼干
贪心455.分发饼干力扣题目链接假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1 解释:你有三个孩子和两块原创 2021-12-15 23:29:01 · 165 阅读 · 0 评论 -
贪心算法——重叠区间问题(力扣435 ,452题)
重叠区间给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2: 输入: [ [1,2], [1,2], [1,2] ] 输出: 2 解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3: 输入: [ [原创 2021-12-14 19:52:12 · 1575 阅读 · 0 评论 -
【无标题】
买卖股票的最佳时机含手续费力扣题目链接(opens new window)给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1: 输入: prices = [1, 3, 2, 8, 4, 9.原创 2021-12-14 18:00:09 · 50 阅读 · 0 评论 -
力扣491
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:输入:nums = [4,4,3,2,1]输出:[[4,4]]来源:力扣(LeetCode)链接:h原创 2021-11-02 22:50:10 · 88 阅读 · 0 评论 -
力扣刷题0804回溯基本问题
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]其实这道题和昨晚刷的那道组合问题是同个类型的问题,甚至这个才是最基本的情况。但在递归结束条件那里想了很久,最后才想出来。解法很类似哈public List<List<Integer>> subsets(int[] nums)原创 2021-10-11 17:44:11 · 62 阅读 · 0 评论 -
力扣算法-组合问题-经典回溯
题目描述给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations著作权归领扣网络所有。商业转载请联系官方授权,非商业原创 2021-10-09 17:48:32 · 219 阅读 · 0 评论 -
力扣刷题-反转链表
题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL刚做了这道题,竟然做不出来,其实思路是对的,就是实现方式有点问题。思路就是没遍历每个结点,就让该结点的的下一结点指向自己。这种有关链表的题还是建议多用几个变量表示,pre,cur,next,而且会因为结点改变的可以先行保存。其实第一步就是没想到要把pre定义为null,在这里纠结了很久。ListNode pre原创 2021-10-08 16:42:15 · 69 阅读 · 0 评论 -
力扣刷题-递归栈问题
1.单调递增栈2.模板如下 for(int i = 0; i < prices.size(); i ++) { while(stk.size() && prices[i] <= prices[stk.top()]) {//一定要记住这里还有一个很重要的 栈不为空的条件 res[stk.top()] = prices[stk.top()]- prices[i]; stk.pop(); }原创 2021-10-07 22:48:19 · 90 阅读 · 0 评论 -
力扣刷题-分治算法-215 第k个最大元素
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。这道题 想要考我们什么咧?其实这道题是想考一个快速排序。我们知道快速排序的原理就是每次能确定一个位置...原创 2021-10-04 16:49:34 · 231 阅读 · 0 评论 -
力扣算法-53 最大子序和
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。这道题的动态规划确实有那么一点难想,但是想出来之后就很容易了。怎么做咧。其实我搞不懂这道题跟传统的动态规划有什么关系,但是就学一学吧。解题思路循环遍历每个数,如果前面一个数大于等于0,就加到当前的数上,或者就保持当前的数不变,然后循环一遍后,再循环数组中原创 2021-10-03 12:03:32 · 71 阅读 · 0 评论 -
力扣刷题-分治算法-169众数元素
题目描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2解题思路众数是什么?可以这么理解 如果一个数是众数 因为它大于n/2,所以众数有个特点就是:如果你把数组分成两半,那么众数必得在左部分出现次数最多或者在右部分出现次数最多,或者两边都出现次数最多所以要找众数怎么找,原创 2021-10-03 11:20:21 · 190 阅读 · 0 评论 -
力扣刷题-贪心算法-1403
题目描述非递增顺序的最小子序列 给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。如果存在多个解决方案,只需返回 长度最小 的子序列。如果仍然有多个解决方案,则返回 元素之和最大 的子序列。与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。注意,题目数据保证满足所有约束条件的解决方案是 唯一 的。同时,返回的答案应当按 非递增顺序 排列。示例 1:输原创 2021-10-02 12:06:15 · 90 阅读 · 0 评论 -
力扣刷题-贪心算法-平衡字符串
题目描述在一个「平衡字符串」中,‘L’ 和 ‘R’ 字符的数量是相同的。给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。示例 1:输入:s = “RLRRLLRLRL”输出:4解释:s 可以分割为 “RL”, “RRLL”, “RL”, “RL”, 每个子字符串中都包含相同数量的 ‘L’ 和 ‘R’。示例 2:输入:s = “RLLLLRRRLR”输出:3解释:s 可以分割为 “RL”, “LLLRRR”, “LR”, 每个子字符原创 2021-10-02 11:19:41 · 162 阅读 · 0 评论 -
力扣刷题-贪心算法-1282-用户分组
题目描述有 n 位用户参加活动,他们的 ID 从 0 到 n - 1,每位用户都 恰好 属于某一用户组。给你一个长度为 n 的数组 groupSizes,其中包含每位用户所处的用户组的大小,请你返回用户分组情况(存在的用户组以及每个组中用户的 ID)。你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。示例 1:输入:groupSizes = [3,3,3,3,3,1,3]输出:[[5],[0,1,2],[3,4,6]]解释:其他可能的解决方案有原创 2021-10-02 11:21:04 · 187 阅读 · 0 评论 -
力扣刷题-贪心算法-55题-跳跃游戏
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。题解题解确原创 2021-10-02 10:44:31 · 110 阅读 · 0 评论 -
1160 暴力算法-拼写单词
public class num3 { //该题的思路就是用两个map,存储对应字母和其数量 //如果words单词中对应字母都能在单词表对应的map中找到 //并且words中的个数小于chars中的个数时,就可以。 List<String>solution( ) { String chars="welldonehoneyr"; String[]words={"hello","world","leetcode"};原创 2021-09-24 10:20:49 · 38 阅读 · 0 评论 -
快速排序算法
快速排序快速排序:什么是快速排序呢,其实快速排序就是选择一个数出来(比如说第一个数),然后后面的数依次跟这个数比较,比它小的就放前面,比它大的就放后面。比较好想,但是比较耗费空间的是利用多一个数组。但是有没有比这种方法好的呢?有的,不需要一个额外的数组,通过两个指针就可以了。这样一次排序好之后,再用5左右两边的数运用同样方法排序一次。简而言之,就是左边有空的,就从右边找一个小的数过来补充。右边有空的,就从左边找一个大的数过来补充。代码:void sort(int num[],int原创 2021-09-21 11:49:53 · 105 阅读 · 0 评论 -
2021-09-05
接替方法就是用两个哈希表!public class num3 { //该题的思路就是用两个map,存储对应字母和其数量 //如果words单词中对应字母都能在单词表对应的map中找到 //并且words中的个数小于chars中的个数时,就可以。 List<String>solution( ) { String chars="welldonehoneyr"; String[]words={"hello","world".原创 2021-09-05 17:34:32 · 43 阅读 · 0 评论 -
力扣216题 组合总和
题目描述:找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]方法一:二进制数表示法注意这句话:组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。也就是说我们其实可以列举出所有原创 2021-09-05 15:52:19 · 260 阅读 · 0 评论