![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
逸疆
好好学习,天天向上 :)
展开
-
刷题记录
刷题记录剑指offer二叉搜索树第k个结点先遍历左子树不存在遍历自己再遍历右子树数据流中的中位数制造一个大根堆和一个小根堆,当前为偶数时向小根堆里插入并从小根堆提一个到大根堆,奇数则相反,当前偶数则为大根堆的顶部元素,奇数为大根和小根的顶部元素平均值滑动窗口最大值制造一个queue存放索引,从first到last递减,并且保证当前的first在当前的窗口中矩阵中的路径dfs+回溯机器人的运动范围bfs|dfs剪绳子动态规划...原创 2020-07-20 23:51:29 · 164 阅读 · 0 评论 -
LeetCode336回文对
这道题按照左神的做法思路就是将传入的string数组中的所有string存入参数1.首先我们得判断string是否本身就是回文子串并且map中存在空字符串2.判断string的是否存在前缀回文包含string的第一个字符,并且string除前缀回文外的逆序在map中存在3.判断string是否存在后缀回文包含string的最后一个字符,并且string除前缀回文外的逆序在map中存在代码...原创 2019-11-15 16:21:30 · 211 阅读 · 0 评论 -
求局部最小值问题
我们可以采用二分法,先判断最后一个元素和第一个元素是否是局部最小值,如果是否的话,那在数组中肯定存在一个局部最小值的元素,继续遍历即可 public static int getLessIndex(int[] arr) { if (arr == null || arr.length == 0) { return -1; // no exist ...原创 2019-10-27 22:11:02 · 1407 阅读 · 0 评论 -
折纸问题
实验发现每个折横的下方折横肯定为下折横即凸折横,上方折横为凹折横所以相当于进行对树进行中序遍历原创 2019-10-27 20:43:13 · 189 阅读 · 0 评论 -
选择项目收益问题
维持一个小根堆和一个大根堆,首先将所有数放入小根堆,每次循环将小根堆里面小于目前手头资金的元素放入大根堆,取出大根堆的顶部元素计算收益,依次循环...原创 2019-10-27 10:57:27 · 136 阅读 · 0 评论 -
找中位数问题
解法:维持2个堆结构,一个大根堆一个小根堆,每次将大于大根堆堆顶的元素放入小根堆,小于小根堆堆顶的元素放入大根堆最后如果两堆差值大于1则需要将存储数量较多的堆中的堆顶元素弹入另一个堆。...原创 2019-10-27 10:44:51 · 441 阅读 · 0 评论 -
算法学习栏目--daydayup
基础算法排序题目金块分割问题原创 2019-10-27 10:43:29 · 343 阅读 · 0 评论 -
金块分割问题
类似哈夫曼树的问题,我们可以将数组中的元素插入到最小堆中,每次将堆中所有结点取出两个并并合并结果放入sum并放回堆中,直到堆中元素只有一个为止...原创 2019-10-27 10:40:05 · 382 阅读 · 0 评论 -
LeetCode88. 合并两个有序数组[JAVA]
由于nums1数组的大小等于n+m所以我们可以从nums1[n+m-1]的位置进行向前遍历,不用担心会覆盖到nums1前面的数值,因为一旦m==0的时候,nums前面的数就可以不用动了。class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int cnt=m+n; ...原创 2019-10-20 18:41:59 · 79 阅读 · 0 评论 -
LeetCode84. 柱状图中最大的矩形[java]
1.单调栈法维持一个单调递增栈,遍历数组中的元素,一旦发现num[i]>num[i-1],则进栈,否则弹出 栈顶元素,进行计算,一旦发现栈顶元素对应height小于num[i],则将i进栈。最后到达数组末尾,对于所有栈内元素进行处理。所有栈内元素必定一个比一个小,而且还小于数组后面所有元素,所以可以用num[i]*(num.length-i)计算。 public int larges...原创 2019-10-19 16:37:22 · 155 阅读 · 0 评论 -
LeetCode78. 子集[java]
1.递归解法对于数组中的每一个数,遍历后都有2种可能即放入list或者不放入list,所以我们只要每次对nums中的数进行判断即可。如果存在则进行递归并放入lists集合中 public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> lists = ...原创 2019-10-19 11:10:46 · 333 阅读 · 1 评论 -
LeetCode76. 最小覆盖子串
这道题一眼就能看出是用滑动窗口做的,但最主要的一点是T的字符串问题,并没有说T中的字符是不同的,所以我们还需要一个map去存储T中的字符对应个数,同时维护一个cnt,每次将right++,将map对于字符value值减一,如果还大于等于0,则cnt++,一旦cnt达到T的长度说明我们已经找到了这样的字串,下一步则是移动left,每移动一次字符使得对于字符value值加一,如果加一后大于0,cnt...原创 2019-10-17 17:06:45 · 105 阅读 · 0 评论 -
LeetCode70. Climbing Stairs
直接采用递归会超时原因是会重复计算,需要改变方法非递归版class Solution { public int climbStairs(int n) { if(n==1) { return 1; } if(n==2) { ...原创 2019-10-17 14:35:08 · 113 阅读 · 0 评论 -
LeetCode69. Sqrt(x)
二分法即可class Solution { public int mySqrt(int x) { if(x==1) { return 1; } long left=1; long right=x/2; while (left<=right) {...原创 2019-10-16 16:41:49 · 91 阅读 · 0 评论 -
66. 加一
主要思路是从最后一位判断+1后是否大于10,如果大于则需要向前移一位继续判断,不大于则直接return即可,如果循环完数组还是carry还是大于1则需另创数组。public class Solution { public int[] plusOne(int[] digits) { if (digits.length == 0) return digits; ...原创 2019-10-16 15:17:57 · 88 阅读 · 0 评论 -
53. 最大子序和
动态规划CurSum记录序列最右边位置的最大值,res记录实际的最大值。class Solution { public int maxSubArray(int[] nums) { int res = Integer.MIN_VALUE, curSum = 0; for (int num : nums) { curSum = Mat...原创 2019-10-11 16:05:48 · 71 阅读 · 0 评论 -
LeetCode 46 全排列
这道题可以通过递归的方式解决,无论初始nums排序如何,由于是没有重复数字的序列,所以可以每次调换两个数字的位置,最后每个循环结束后利用回溯回到初始序列状态class Solution {public List<List<Integer>> permute(int[] nums) { List<List<Integer>> li...原创 2019-10-11 11:20:34 · 69 阅读 · 0 评论 -
leetcode 4. Median of Two Sorted Arrays(二分查找)
1.分析问题:这里有两点条件,长度相等,任意元素大于。所以列出下面的模型,为了后面便于思考 left_part | right_part leeA[0], A[1], …, A[i-1] | A[i], A[i+1], …, A[m-1]B[0], B[1], …, B[j-1] | B[j], B[j+1], …, B[n-1]其中m:A数组长度n:B数组...转载 2019-07-24 15:51:35 · 74 阅读 · 0 评论 -
LeetCode13.罗马数字转整数
题目很简单直接用map处理就行,但记住不要用string类型处理,因为char转string很麻烦,内部可能造成莫名其妙的错误,直接char类型作为map的索引即可class Solution {public:int romanToInt(string s) {int res=0;map<char,int>m;m[‘I’]=1;// m[“IV”]=4;// m[“IX...原创 2019-07-25 15:49:47 · 76 阅读 · 0 评论 -
LeetCode14. 最长公共前缀
直接寻找数组中最短的那个string作为启示查找数组,然后用其与第一个字符串进行比较,再将结果与第二个字符串进行比较,以此类推得出结果class Solution {public:string longestCommonPrefix(vector& strs) { if(strs.empty()) { return ""; } int ...原创 2019-07-26 15:37:40 · 71 阅读 · 0 评论 -
leetcode 10 正则表达式匹配
题目如上如果用正常递归方法class Solution { public:bool isMatch(string s, string p) {// if(match(s,p)>0)// {// return true;// }// return false;s=s+"!";p=p+"!";return match(s,p);}bool match (st...原创 2019-08-21 19:06:00 · 71 阅读 · 0 评论 -
leetcode20. 有效的括号
最简单的方法,创建一个栈,遍历string s,对于每个char 如果是左括号则进入stack ,右括号则判断栈中最上面元素是否为对应的左括号即可!代码如下> class Solution { public:> bool isValid(string s) {> stack<char>store;> for...原创 2019-08-22 14:35:20 · 80 阅读 · 0 评论 -
leetcode21 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。简单题,主要纪念一下第一次没修改直接通过!class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *n=new ListNode(-1); Li...原创 2019-08-28 14:47:10 · 79 阅读 · 0 评论 -
leetcode 23 合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。这题直接用最小堆,第一歩将每个lists的链表头结点放入堆中,第二歩开始循环 每次从堆中取一个元素并放入输出链表的尾端 class Solution { public: ListNode *mergeKLists(vector<ListNode *> &lists) { ...原创 2019-08-29 17:01:01 · 48 阅读 · 0 评论 -
26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。快慢指针就完事了嗷,easy,这几天运气好,都很快AC了 :)class Solution {public: int removeDuplicates(vector<int>&...原创 2019-08-30 14:47:44 · 73 阅读 · 0 评论 -
leetcode35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。直接二分法即可class Solution {public: int searchInsert(vector<int>& nums, int target) { int low=0; ...原创 2019-09-09 16:34:11 · 60 阅读 · 0 评论 -
LeetCode38 报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整...原创 2019-09-19 18:18:35 · 71 阅读 · 0 评论 -
LeetCode 41. 缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。我们的思路是把1放在数组第一个位置nums[0],2放在第二个位置nums[1],即需要把nums[i]放在nums[nums[i] - 1]上,那么我们遍历整个数组,如果nums[i] != i + 1, 而nums[i]为整数且不大于n,另外nums[i]不等于nums[nums[i] - 1]的话,我们将两者位置调换,如果不满足上述...原创 2019-09-20 18:38:30 · 76 阅读 · 0 评论 -
LeetCode 42 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。这个算法需要left和right两个指针分别指向数组的首尾位置,从两边向中间扫描,在当前两指针确定的范围内,先比较两头找出较小值,如果较小值是left指向的值,则从左向右扫描,如果较小值是right指向的值,则从右向左扫描,若遇到的值比当较小值小,则将差值存入结果,如遇到的值大,则重新确定新的窗口...原创 2019-09-21 21:53:07 · 61 阅读 · 0 评论 -
LeetCode 44 通配符匹配
class Solution { public static void main(String[] args) { Solution s=new Solution(); boolean res=s.isMatch("aa","*"); System.out.println(res); } public boolean isMa...原创 2019-09-24 21:17:32 · 81 阅读 · 0 评论 -
LeetCode 45 Jump Game II
这里贪婪并不是要在能跳的范围中选跳力最远的那个位置,因为这样选下来不一定是最优解,这么一说感觉又有点不像贪婪算法了。我们这里贪的是一个能到达的最远范围,我们遍历当前跳跃能到的所有位置,然后根据该位置上的跳力来预测下一步能跳到的最远距离,贪出一个最远的范围,一旦当这个范围到达末尾时,当前所用的步数一定是最小步数。这里cur是当前能到达的最远位置,last是上一步能到达的最远位置,我们遍历数组,首先...原创 2019-10-10 11:03:44 · 102 阅读 · 0 评论 -
LeetCode 7. 反转整数(Reverse Integer)
题目描述给定一个 32 位有符号整数,将整数中的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。解题思路反转整数的思路是从一个数的最后一位开始,...转载 2019-07-24 15:08:14 · 97 阅读 · 0 评论