刷题
KJ_Fighting!
大可不必了解我
展开
-
动态规划入门题 leetcode714 买卖股票
leetcode714 买卖股票最佳时机含手续费给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出:原创 2020-12-17 11:11:48 · 208 阅读 · 1 评论 -
leetcode74 二分查找
leetcode74 二分查找编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,50]], target = 3输出:true思路该矩阵按照大小顺序已经排好序,将其转换成一维数组就是一个升序数组,因此可以采用二分查找的方式来解决。需要注意的是由于是二维数组所以需要进行坐标的转换原创 2020-11-29 13:14:59 · 119 阅读 · 0 评论 -
leetcode179 最大数
最大数给定一组非负整数 nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。`示例 1:输入:nums = [10,2]输出:“210”示例 2:输入:nums = [3,30,34,5,9]输出:“9534330”示例 3:输入:nums = [1]输出:“1”示例 4:输入:nums = [10]输出:“10”`思路这道题第一眼看上去并不难,难点在于如何设定一个统一的方法来比原创 2020-11-21 13:32:05 · 203 阅读 · 0 评论 -
链表的插入排序算法 leetcode147
LeetCode147对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路插入排序是比较简单的排序。在对链原创 2020-11-20 12:57:10 · 172 阅读 · 0 评论 -
leetcode55 跳跃游戏
leetcode55 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一原创 2020-11-17 11:34:21 · 98 阅读 · 0 评论 -
leetcode406 根据身高重建队列
leetcode406 根据身高重建队列假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]思路根据题目要求,每个数组的第二位代表了前面有多少个大于或等于它的原创 2020-11-16 13:14:58 · 116 阅读 · 0 评论 -
LeetCode49 字母异位分组
LeetCode49 字母异位分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]思路用哈希表进行分类,把String转化为char数组再排序作为key,value为一个List,通过拉链法存放同类的String。主要还是考察哈希表的运用class So原创 2020-11-12 10:52:02 · 235 阅读 · 2 评论 -
LeetCode回溯问题 多问题总结
回溯合辑LeetCode39给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]简单的回溯基本就是回溯的模板,注意点就是返回的Arr原创 2020-11-11 14:06:01 · 125 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组
LeetCode33 搜索旋转排序数组给你一个升序排列的整数数组 nums ,和一个整数 target 。假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例 2:输入:nums = [4,5,6,7,0,1,2原创 2020-11-09 12:18:19 · 130 阅读 · 0 评论 -
LeetCode31 下一个排列
LeetCode31 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1思路:我们希望下一个数比当前数大,这样才满足“下一个排列”的定义。因此只需要将后面的「大数」与前面的「小数」交换,就能得到一个更大的数。原创 2020-11-09 11:09:53 · 87 阅读 · 0 评论 -
LeetCode26、27 删重复元素
LeetCode26 删重复元素给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。思路考虑用 2 个指针,一个在前记作 p,一个在后记作 q,算法流程如下:1.比较 p原创 2020-11-08 11:17:37 · 390 阅读 · 0 评论 -
LeetCode 24 两两交换链表节点
LeetCode 24 两两交换链表节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]非递归解法:三指针class Solution { public ListNode swapPairs(ListNode head) {原创 2020-11-07 12:30:05 · 121 阅读 · 0 评论 -
leetcode 56、57
leetcode56 合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。思路:将整个数组按照第一个元素的值排序原创 2020-11-04 12:44:27 · 133 阅读 · 0 评论