自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 LeetCode ---- 121、买卖股票的最佳时机

题目链接 思路: 当天买入后,必须在之后的某一天卖出,并且要使利润最大,那么,在遍历数组的过程中,以当前位置为买入点,向后遍历寻找使得以当前位置利润最大的位置,记录利润最大值。对数组的每个元素均进行遍历即可。 public int maxProfit(int[] prices) { if (prices == null || prices.length == 0) ...

2020-04-30 13:31:04 65

原创 LeetCode ---- 119、杨辉三角 II

题目链接 思路: 此题与118题计算方法一致,区别仅在于此题只需要输入特定行的数据。准备两个List,分别记录当前行和上一行的值,当前行根据上一行的值计算得知。第 i 行 j 位置的计算公式为: result[ i ][ j ] = result[ i - 1][ j ] + result[i - 1][ j - 1 ] public List<Integer> get...

2020-04-30 13:18:54 92

原创 LeetCode ---- 118、杨辉三角

题目链接 思路: 杨辉三角的规律:每一行的第一个数和最后一个数都是1,中间的数等于上一行中对应位置的数以及对应位置前一个数的和。 即:若当前行为 i(i>1),row[ i][ j ]表示第 i 行第 j 个元素,则row[ i ][ j ] = row[ i - 1 ][ j ] + row[ i - 1 ][ j - 1 ] 用此规律进行编写代码即可。 public...

2020-04-29 12:51:58 144

原创 LeetCode ---- 112、路径总和

题目链接 思路: 遍历时,分别遍历每一个节点的左右子树。遍历到每一个节点,用剩余的和减去当前节点的值,接着继续向下遍历其左右子树,直到遍历到叶子节点时,判断此时剩余和减去叶节点值是否为0,若为0,则说明存在这样一条路径。 public boolean hasPathSum(TreeNode root, int sum) { if (root == null) { ...

2020-04-29 12:45:35 81

原创 LeetCode ---- 111、二叉树的最小深度

题目链接 思路: 类似于求解二叉树的最大深度。求解过程中,比较两棵子树那棵的深度小,就取那棵子树的深度为当前节点的深度。 代码中的三目运算符参考自LeetCode评论区用户@听见下雨的声音的评论。 public int minDepth(TreeNode root) { if (root == null) { return 0; ...

2020-04-28 13:21:42 63

原创 LeetCode ---- 110、平衡二叉树

题目链接 思路: 对每一个节点求出左右两棵子树的高度,若高度差大于1,则不是平衡二叉树。 public boolean isBalanced(TreeNode root) { if (root == null) { return true; } if (Math.abs(depthOfTree(root.lef...

2020-04-28 13:11:01 47

原创 LeetCode ---- 108、 将有序数组转换为二叉搜索树

题目链接 思路: 数组已经按照升序排列,为了使得所构成的二叉搜索树为平衡二叉树,则选择数组的中间节点作为根节点,根节点的左节点位于数组前半部分的中间,根节点的右节点位于数组右半部分的中间,按照此方法进行递归即可。 public TreeNode sortedArrayToBST(int[] nums) { if (nums == null || nums.lengt...

2020-04-27 15:09:44 60

原创 LeetCode ---- 107、二叉树的层次遍历 II

题目链接 思路: 二叉树的层次遍历。注意如何判断每一个层的节点数为多少,此处参考LeetCode用户@wiliSuse在评论区分享的解法,当前节点所在的层的节点数等于此时队列中的节点总数。 public List<List<Integer>> levelOrderBottom(TreeNode root) { LinkedList<Li...

2020-04-27 15:01:56 49

原创 LeetCode ---- 104、二叉树的最大深度

题目链接 思路: 采用先序遍历。先遍历统计左子树的高度,再遍历统计右子树的高度,比较谁更大,则为树的最大深度。 public int maxDepth(TreeNode root) { if (root == null) { return 0; } int leftDepth = maxDepth(root....

2020-04-26 13:03:33 51

原创 LeetCode ---- 101、对称二叉树

题目链接 思路: 相当于查看两棵树是否是对称的,即对比根节点的左子树 p 和右子树 q。若p和q相同,则比较p的左子树和q的右子树,若相同,则再对p的右子树和q的左子树进行比较,全部相同返回true,否则,返回false。 public boolean isSymmetric(TreeNode root) { if (root == null) { ...

2020-04-26 13:01:14 57

原创 LeetCode ---- 100、相同的树

题目链接 思路: 使用先序遍历解决。遍历到当前节点,比较两个节点的值是否相等,若不等,则说明不是相同的树,若相等,则接着遍历其左子树之后遍历其右子树。 public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return...

2020-04-25 13:03:36 57

原创 LeetCode ---- 88、 合并两个有序数组

题目链接 思路: 从两个数组的有效尾部开始向前遍历。向前遍历的过程中,比较两个数组中当前位置的数字的大小,较大的数字放在num1数字的index位置(index初始为m + n - 1),之后index--,直到某一个数组遍历结束为止。若数组2还有剩余,则将剩余元素依次加入到数组1中。 public void merge(int[] nums1, int m, int[] nums...

2020-04-25 12:59:27 83

原创 LeetCode ---- 83、删除排序链表中的重复元素

题目链接 思路: 双指针。遍历到一个节点时,记录此时的节点,向后寻找第一个不等于此节点值得节点,与此节点直接连接即可。 public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) { return head; ...

2020-04-24 14:04:10 55

原创 LeetCode ---- 70、爬楼梯

题目链接 思路: 此题的思路与解决斐波那契数列一致。可以使用递归、非递归多种方法。 下面代码采用非递归版中的其中一种。由于斐波那契数列中的数字等于前面两个数字的之和,所以使用三个变量即可求解第n个数字。 public int climbStairs(int n) { if (n <= 0) { return 0; } ...

2020-04-24 13:56:01 59

原创 LeetCode ---- 69、x 的平方根

题目链接 思路: 牛顿迭代法 public int mySqrt(int x) { if (x < 2) { return x; } long r = x; while (r * r > x) { r = (r + x / r) / 2; } ...

2020-04-23 15:00:36 69

原创 LeetCode ---- 67、二进制求和

题目链接 思路: 逐位相加,使用一个变量来记录是否有进位。注意,相加结束之后还存在进位的情况。 public String addBinary(String a, String b) { StringBuffer sb = new StringBuffer(); int jin = 0; int i = a.length() - 1;...

2020-04-23 14:51:13 58

原创 LeetCode ---- 66、 加一

题目链接 思路: 从后往前遍历,个位加1之后,注意进位的问题。 public int[] plusOne(int[] digits) { if (digits == null || digits.length == 0) { return new int[] { 1 }; } int jin = 0; ...

2020-04-22 12:40:02 43

原创 LeetCode ---- 58、 最后一个单词的长度

题目链接 解法一: 使用String的split方法,将字符串按照空格切开,得到字符串数组,从后往前遍历,只要出现一个字符串的长度比0大并且其不等于空格字符串,即此字符串的长度为所求的字符串的长度 public int lengthOfLastWord(String s) { if (s == null || s.equals("")) { ...

2020-04-22 12:37:13 50

原创 LeetCode ---- 53、最大子序和

题目链接 思路:从0开始遍历数组,准备一个curSum计算当前和,sum用来计算最大和。每次遍历到一个数,curSum等于curSum与此数相加,sum等于当前sum和curSum中哪个更大,如果此时curSum结果小于0,则此时的curSum肯定不会是最大和,让curSum=0重新开始相加。遍历结束,即可找出最大子序和。 public int maxSubArray(int[] n...

2020-04-20 13:24:16 62

原创 LeetCode ---- 38、外观数列

题目链接 思路:统计前一个字符串中紧邻的相同元素的个数,用StringBuilder来进行拼接个数和这个字符,如 “11”,拼接完就是“21”,代表两个一。 public String countAndSay(int n) { if (n == 1) { return "1"; } String preStrin...

2020-04-20 13:17:21 101

原创 LeetCode ---- 35、搜索插入位置

题目链接 解法一: 遍历数组,遍历到数组中第一次出现大于等于要插入的数时,返回此时的位置即可。 public int searchInsert(int[] nums, int target) { if (nums == null || nums.length == 0) { return 0; } for (i...

2020-04-19 13:50:58 59

原创 LeetCode ---- 27、移除元素

题目链接 解法一: 碰到不是要删除的值,移动到数组中的i位置(i初始为0),之后i++。若碰到是要删除的值,直接跳过。 public int removeElement(int[] nums, int val) { if (nums == null || nums.length == 0) { return 0; } ...

2020-04-19 13:45:05 60

原创 LeetCode ---- 26、 删除排序数组中的重复项

题目链接 解法一:双指针。i从0位置开始,j从i+1开始,若i、j位置的数字相等,则j向后移动一位,直到不相等为止,将此时i位置的数字放在数组中index位置,之后index+1(index起始值为0)。 public int removeDuplicates(int[] nums) { if (nums.length < 2) { re...

2020-04-18 13:10:37 60

原创 LeetCode ---- 14、最长公共前缀

题目链接 解法一:遍历string数组找到长度最短的那个字符串,以此字符串为基准进行寻找最长公共前缀。遍历此字符串的每个字符,与其余字符串对应位置的字符进行比较,若剩余字符串在此位置都与该字符相等,则将该字符添加进结果中,循环判断并添加。否则直接返回已找到的前缀结果。 public String longestCommonPrefix(String[] strs) { ...

2020-04-18 13:00:20 57

原创 LeetCode ---- 13、罗马数字转整数

题目链接 思路一:从字符串0位置开始遍历,依次判断每一种可能。 public int romanToInt(String s) { char[] str = s.toCharArray(); int result = 0; for (int i = 0; i < str.length; i++) { if ...

2020-04-17 13:07:12 52

原创 LeetCode ---- 9、回文数

题目链接 思路一:将整数变为字符串。准备两个指针i,j,分别指向字符串的头和尾,比较i,j所指向的字符是否相等,若不等,返回false,若相等,i,j向中间逼近,每次移动一个位置,继续判断,直到 i>=j,此时说明这个整数为回文数,返回true。 public boolean isPalindrome(int x) { String str = String.v...

2020-04-17 12:59:59 40

原创 LeetCode ---- 7、整数反转

题目链接 思路:从这个数的末尾向前开始计算,准备一个变量result进行存储结果,每次取出的末尾数记为tail,tail=num % 10,result=result*10 + tail。注意:在进行result*10计算之前,应该先判断是否会溢出,若会溢出,则直接返回0。 public int reverse(int x) { if (x == Integer.MI...

2020-04-16 12:55:05 50

原创 LeetCode ---- 28、实现strStr()

题目链接 思路:使用KMP算法进行求解。 public int strStr(String haystack, String needle) { if (needle.equals("")) { return 0; } char[] hayChar = haystack.toCharArray(); ...

2020-04-16 12:46:04 59

原创 LeetCode ---- 21、合并两个有序链表

题目链接 思路: 依次从头开始判断两个链表中的节点值的大小,按从小到大串在一起 class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public ListNode mergeTwoLists(ListNode l1, ListN...

2020-04-15 12:41:34 223

原创 LeetCode ---- 20、有效的括号

题目链接 思路: 准备一个栈,遇到左括号压栈,遇到右括号弹出栈顶元素,若弹出元素与此时遇到的右括号不匹配,返回false。当遍历结束后,若未返回false,则返回true。 public boolean isValid(String s) { if (s == null || s.equals("")) { return true; ...

2020-04-15 12:35:34 47

原创 LeetCode ---- 15、三数之和

题目链接 此题主要难点在于如何判断重复。思路与两数之和的思路大体相同。 1、对原数组不排序的解。会超时 主要思路:准备一个HashMap来查找数组中是否存在剩余两数之和。 public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = n...

2020-04-13 15:53:12 45

原创 LeetCode ---- 8、字符串转数字

题目链接 此题需要格外注意边界 思路:先去掉前面开头的空格字符。准备一个布尔遍历neg,用于记录是否是负数,之后依次遍历剩余各字符是否符合题目要求。转换为数字时,要注意越界问题。 解法一、 有点繁琐。 public int myAtoi(String str) { if (str == null || str.equals("")) { return 0; ...

2020-04-12 13:20:33 99

原创 LeetCode ---- 1、两数之和

1、暴力解 思路:准备一个Set集合,用于存储已经遍历过的不重复的数。遍历数组arr,当前位置为i,若Set集合中已包含当前数arr[i],就跳过;若不包含,从当前位置的后一个位置i+1开始遍历数据,记为j,计算arr[i]+arr[j]是否等于目标数target,若等于,返回坐标i,j,若不等于,接着遍历。 时间复杂度:O(n^2) public int[] twoSum(int[] ...

2020-04-11 12:49:16 54

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除