Leetcode学习
艾姆鸥
一个不会画画的程序员不是一个好博主
展开
-
Leetcode初学————不同整数的最少数目
题目分析对于这道题,我的思路是先讲数组arr中的数都存入map中,再将其value导出并排序,之后再用k减去最小的value值,当k==0时,直接返回value的总数-被k减去的个数,当k<0时,就返回value的总数-被k减去的个数+1代码class Solution { public int findLeastNumOfUniqueInts(int[] arr, int k) { Map<Integer,Integer> map =n.原创 2020-07-17 16:46:01 · 143 阅读 · 0 评论 -
Leetcode初学——等式方程的可满足性 并查集思想
好久没写博客了,绝对不是因为博主偷懒了,只是春夏交际太过乏累了(理不直,气也壮).jpg题目分析这道题是并查集类型的题目我们可以先找出各点之间已经存在的等式关系以这道题为例 ,作图输入["a==b","e==c","b==c","a!=e"]a==b e==c b==c...原创 2020-06-09 10:27:07 · 108 阅读 · 0 评论 -
Leetcode初学——和为k的子数组
题目:分析:这道题目我打算使用暴力法去做,因为我的知识水平有限,实在想不到更好的方法,本想用[滑动窗体]来做的,但想了下,滑动窗体好像更适用于有序的数组,这样无序的数组似乎并不好用,如果各路大神有什么更好的方法,麻烦在评论区里指点下小弟,多谢代码:class Solution { public int subarraySum(int[] nums, int k) { int res=0; int now=0; while(n.原创 2020-05-15 10:07:36 · 104 阅读 · 0 评论 -
Leetcode初学——买卖股票的最佳时机|| 及 贪心算法的简单介绍
题目:分析:我的计算方法就是当天买,第二天卖,如果第二天卖的价格是负数,则当天不买,一直到最后一天即 如果 prices[i+1]-prices[i]>0 则 res+= prices[i+1]-prices[i] 如果 prices[i+1]-prices[i]<=0 则 res+= 0i为天数 i+1<=最大天数我们从几种可能性来分析这道题持续上涨型像这样的类型我们...原创 2020-05-14 17:57:52 · 182 阅读 · 0 评论 -
Leetcode初学——环形链表||
题目:解析:这道题的意思是,如果没有环,就返回null如果有环就返回环开始的节点对于这道题有三种解法(其实两种,第三种看运气)第一种定义一个set或者list,一边遍历链表,一边存入节点,如果存入的节点是已经存在的,那么说明有环,且这个节点就是环的初始节点代码:class Solution { public ListNode detectCycl...原创 2020-05-01 09:41:52 · 104 阅读 · 0 评论 -
Leetcode初学——只出现一次的数字
题目:分析:这道题有一个比较有意思的点,就是他要求时间复杂度是O(n),空间复杂度是N(1)如果没有这两个要求的话,这道题就有很多解法但有这两个要求就需要好好思考一下了如果大家熟悉 异或 的话,这道题应该是非常简单的了int a=2;a^a=0;两个相同的数,异或后是0而0和任意数异或,均为那个数本身明白这一点之后,这道题的解法就出来了对整个数组...原创 2020-04-28 10:10:22 · 135 阅读 · 0 评论 -
Leetcode初学——求根到叶子节点数字之和
题目:分析:本质是深度优先遍历代码:class Solution { List<Integer> res=new ArrayList<>(); public int sumNumbers(TreeNode root) { if(root==null) return 0; he...原创 2020-04-13 11:21:57 · 127 阅读 · 0 评论 -
Leetcode初学——二叉树的最小深度
题目:分析:深度优先遍历代码:class Solution { int min=Integer.MAX_VALUE; public int minDepth(TreeNode root) { if(root==null) return 0; help(root,1); return min...原创 2020-04-13 10:56:31 · 85 阅读 · 0 评论 -
Leetcode初学——验证二叉搜索树
题目:分析:对于这道题,我们有一个很巧妙的方法,就是先用中序遍历将这个二叉树的值都存入一个数组或列表中,然后比较元素的大小以示例2为例,我们对其进行中序遍历,得到一个list:1,5,3,4,6如果是一个正确的二叉搜索树的话,我们得到的答案应该是:1,3,4,5,6所以我们可以借助中序遍历的方法来帮助我们进行判断代码:class Solution...原创 2020-03-23 11:37:25 · 92 阅读 · 0 评论 -
Leetcode初学——链表的中间结点(每日一题篇)
题目:分析:这道题有两种解法第一种解法就是最普通的暴力解法,先遍历一遍,再取长度的中间数进行遍历,然后得到想要的节点时间复杂度是O(3/2 N)第二种解法就是用快慢指针的方法进行求解这个方法使用了两个指针,A指针每次循环都往前走一步,B指针要A指针走两步,他才会走一步这样,当A指针走到尾结点时,B指针就在中间结点注意:在这道题中,如果结点数是偶数的话,要中...原创 2020-03-23 10:27:30 · 91 阅读 · 0 评论 -
Leetcode初学——拼写单词
题目:分析这道题主要需要做的是,对每个单词进行检查,我利用list的contains来进行判断,存在就删除掉这个字母,不存在则继续遍历代码class Solution { public int countCharacters(String[] words, String chars) { int res=0; List<Ch...原创 2020-03-17 10:55:55 · 153 阅读 · 0 评论 -
Leetcode初学——对称二叉树
题目:分析:对于这道题,我们看到的第一时间就应该反应过来,我们要用广度遍历和回文数的判别思想来做代码:class Solution { //存储遍历用的list //这里用String类型是为了方便存储null的值 private List<List<String>> res=new ArrayList<>(); ...原创 2020-03-09 11:15:48 · 106 阅读 · 0 评论 -
Leetcode初学——二叉树的最大深度
题目:分析:回溯法在解二叉树问题中真的是非常好用了代码:class Solution { int max=0; public int maxDepth(TreeNode root) { help(root,0); return max; } public void help(TreeNode root,int c...原创 2020-02-27 09:41:24 · 116 阅读 · 0 评论 -
Leetcode初学——路径总和||
题目:分析:这道题和路径总和|并没有什么太大的区别,依然可以用回溯法进行计算,并且不用考虑剪枝代码:class Solution { List<List<Integer>> res=new ArrayList<>(); public List<List<Integer>> pathSum(TreeNo...原创 2020-02-26 12:33:25 · 92 阅读 · 0 评论 -
Leetcode初学——路径总和
题目:分析:这道题目我们用回溯法去做回非常的好做,不过会涉及到剪枝的问题,还好这里的数据量应该不大,即使不剪枝,也不影响结果代码:class Solution { boolean res=false; public boolean hasPathSum(TreeNode root, int sum) { if(root==null) re...原创 2020-02-26 12:22:10 · 104 阅读 · 0 评论 -
Leetcode初学——最长连续序列
题目:分析:根据题目要求,时间复杂度为O(n),可惜我还做不到这一点,所以我用了最普通的暴力枚举:先对数组进行排序,然后依次寻找最长连续序列 时间复杂度是O(nlog(n))代码:class Solution { public int longestConsecutive(int[] nums) { int max=0; if(nums...原创 2020-02-26 12:01:13 · 91 阅读 · 0 评论 -
Leetcode初学——杨辉三角||
题目:分析:这里要注意,索引是从0开始的所以第3行是 1 3 3 1代码:class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> res=new ArrayList<>(); List&...原创 2020-02-25 09:42:11 · 74 阅读 · 0 评论 -
Leetcode初学——杨辉三角
题目:分析:这道题可以用递归的思想去做,也可以直接循环遍历生成代码:class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> res=new ArrayList<>(); ...原创 2020-02-25 09:26:08 · 87 阅读 · 0 评论 -
Leetcode初学——验证回文串
题目:代码:class Solution { public boolean isPalindrome(String s) { s = s.replaceAll("\\W", ""); s=s.toUpperCase(); StringBuilder str=new StringBuilder(s); String...原创 2020-02-24 11:41:56 · 116 阅读 · 0 评论 -
Leetcode初学——二叉树中序遍历
题目:分析:用递归做,非常简单代码:class Solution { List<Integer> res=new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { help(root); return r...原创 2020-02-24 11:03:36 · 67 阅读 · 0 评论 -
Leetcode初学——反转链表||
题目:代码:class Solution { ListNode successor = null; // 后驱节点 public ListNode reverseBetween(ListNode head, int m, int n) { // base case if (m == 1) { return rev...原创 2020-02-21 18:52:37 · 86 阅读 · 0 评论 -
Leetcode初学——反转链表
题目:代码:class Solution { public ListNode reverseList(ListNode head) { ListNode cur=head; ListNode pre=null; while(cur!=null){ ListNode temp=cur.next; ...原创 2020-02-21 18:37:23 · 74 阅读 · 0 评论 -
Leetcode初学——子集||
题目:分析:这道题我们完全可以像做子集|的时候一样去做,唯一的变数在于有重复的数字,并且测试用例是无序的,所以我们只需要再这里做一点修改即可代码:class Solution { //用set来存储结果,排除重复结果 private Set<List<Integer>> res=new HashSet<>(); pu...原创 2020-02-21 10:02:35 · 94 阅读 · 0 评论 -
Leetcode初学——格雷编码
题目:代码:class Solution { public List<Integer> grayCode(int n) { int size = 1 << n; List<Integer> res=new ArrayList<Integer>(); for(int i=0;i<...原创 2020-02-20 18:29:38 · 100 阅读 · 0 评论 -
Leetcode初学——分割链表
题目:分析:这道题我用了一个投机取巧的方法我们新建一个同等长度的链表然后对原链表进行遍历小于x的先填入链表再遍历一次将大于x的也填入链表这样时间复杂度为O(n)代码:class Solution { public ListNode partition(ListNode head, int x) { ListNode new_he...原创 2020-02-20 09:34:25 · 79 阅读 · 0 评论 -
Leetcode初学——最大矩形
题目:分析:对于这道题为了方便分析,我重新对输入数组进行了构造构造了一个新数组,每个位置记录的是当前位置及向下的连续为1的个数如 :[4,0,3,0,0][3,0,2,2,2][2,1,1,1,1][1,0,0,1,0]然后对这个数组进行遍历当遇到不为0的位置时,向右遍历,并求最大矩形面积,直到遇到0;代码:class Solution { ...原创 2020-02-19 18:36:39 · 114 阅读 · 0 评论 -
Leetcode初学——删除排序链表中的重复元素
题目:分析:设置哑节点,以pre和now的形式依次遍历下去即可代码:class Solution { public ListNode deleteDuplicates(ListNode head) { if(head==null || head.next==null) return head; ListNode ...原创 2020-02-19 09:46:05 · 69 阅读 · 0 评论 -
Leetcode初学——删除排序链表中的重复元素||
题目:分析:这道题我们需要把出现的重复数字全部删除依次往后遍历即可代码:class Solution { public ListNode deleteDuplicates(ListNode head) { if(head==null || head.next==null) return head; ListN...原创 2020-02-18 18:21:12 · 98 阅读 · 0 评论 -
Leetcode初学——删除排序数组中的重复项||
题目:分析:对于这道题,我们要做的就是如何判断其中某个数字出现了2遍以上在这里我选择用map进行判断每个数都存入map中,map自行计数如果出现第三个数就将后面的数前移代码:class Solution { public int removeDuplicates(int[] nums) { int n=nums.length; ...原创 2020-02-18 09:29:54 · 107 阅读 · 0 评论 -
Leetcode初学——子集
题目:分析:这道题和上一道——组合 其实基本一样,无非是k从0~n代码:class Solution { private List<List<Integer>> res=new ArrayList<List<Integer>>(); public List<List<Integer>> s...原创 2020-02-17 18:32:29 · 82 阅读 · 0 评论 -
Leetcode初学——组合
题目:分析:这道题我认为很简单只要使用回溯法的话,可以很方便快捷的解决代码:class Solution { private List<List<Integer>> res=new ArrayList<List<Integer>>(); public List<List<Integer>&g...原创 2020-02-17 08:53:55 · 111 阅读 · 0 评论 -
Leetcode初学——颜色分类
题目:代码:class Solution { public void sortColors(int[] nums) { int left=0; int right=nums.length-1; int cur=0; int temp=0; while(cur<=right){ ...原创 2020-02-15 19:50:01 · 95 阅读 · 0 评论 -
Leetcode初学——搜索二维矩阵
题目:分析:我们已知该二维数组的每一行都是有序的,所以我们可以从这里下手我们可以根据每一行的最后一个数判断target应该会出现在哪一行我们从上到下进行搜索确定target会在行数再在该行中进行遍历搜索代码:class Solution { public boolean searchMatrix(int[][] matrix, int target) ...原创 2020-02-15 19:23:43 · 81 阅读 · 0 评论 -
Leetcode初学——矩阵置零
题目:分析:这道题如果没有空间限制的话我会另设一个m*n的数组作为标记数组来方便计算不过既然他要求空间负责度是1的话我们也可以有办法这样做只需要将数组中的0都换成某个标记数然后进行换0即可代码:class Solution { public void setZeroes(int[][] matrix) { int n=matri...原创 2020-02-15 10:42:35 · 79 阅读 · 0 评论 -
Leetcode初学——编辑距离
题目:分析:这道题我们可以用动态规划的原理去做dp[i][j]如下图我们可以发现当word1.charAt(i)==word.charAt(j)时 dp[i][j]=dp[i-1][j-1]否则 dp[i][j]=Math.min(dp[i][j-1],Math.min(dp[i-1][j],dp[i-1][j-1]))+1代码:class S...原创 2020-02-14 19:36:22 · 163 阅读 · 0 评论 -
Leetcode初学——爬楼梯 动态规划
题目:分析:这道题我们可以用动态规划的原理来做我们将每个楼梯的方案数列出来我们可以很清楚的发现dp[i]=dp[i-1]+dp[i-2]道理也很简单dp[i]的方案数 =(dp[i-1]的方案数+一阶台阶)+(dp[i-2]的方案数+二阶台阶)代码:class Solution { public int climbStairs(int n...原创 2020-02-14 10:39:04 · 94 阅读 · 0 评论 -
Leetcode初学——x的平方根
题目:分析:这是道简单题,但我们对他却有多种不同的解法1.正面硬刚计算器在计算 sqrt(s)的时候所采用的方法是这样的所以我们可以直接用右边的式子进行计算class Solution { public int mySqrt(int x) { if (x < 2) return x; int left = (in...原创 2020-02-14 10:23:44 · 124 阅读 · 0 评论 -
Leetcode初学——二进制求和
题目:分析:这道题和十进制的求和没什么太大区别难点都在于进位上1+1=10但我们不仅要把问题解决,还要把代码写的好看代码:class Solution { public String addBinary(String a, String b) { StringBuilder res=new StringBuilder(); ...原创 2020-02-13 18:37:42 · 102 阅读 · 0 评论 -
Leetcode初学——加一
题目:分析:这道题需要注意的只有一点,进位问题尤其是 9+1=10 这类问题代码:class Solution { public int[] plusOne(int[] digits) { int n=digits.length; int count=0; for(int i=n-1;i>=0;i--){ ...原创 2020-02-13 18:17:34 · 183 阅读 · 0 评论 -
Leetcode初学——最小路径和
题目:分析:这道题和前一道不同路径数的题几乎一样我们可以用同样的方法去做先对第一行和第一列进行处理之后遵循 grid[i][j]+=min(grid[i-1][j],grid[i][j-1])的原则去处理其他格子最后输出结果就是7代码:class Solution { public int minPathSum(int[][] gr...原创 2020-02-13 09:40:10 · 111 阅读 · 0 评论