自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从尾到头打印链表

问题描述: 解题思路: 从尾到头打印链表,一种依赖栈的特性先进后出 ,另一种方式通过递归链表,在后续位置,将节点值加入新的数组,然后返回也可以做到。 题解: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution {

2022-01-28 15:15:58 1184

原创 剑指 Offer 13. 机器人的运动范围

问题描述: 解题思路: 采用bfs从左上到右下搜索 class Solution { public int movingCount(int m, int n, int k) { if(k == 0){ return 1; } Queue<int[]> queue = new LinkedList<int[]>(); int[]tx = new int[]{0,1};

2022-01-28 15:00:37 439

原创 leetCode 415. 字符串相加

class Solution { public String addStrings(String num1, String num2) { int i = num1.length()-1; int j = num2.length()-1; int add = 0; StringBuffer res = new StringBuffer(); while(i>=0||j>=0||add!=0){ .

2022-01-26 09:13:47 336

原创 leetCode 300. 最长递增子序列

问题描述: 解题思路: 采用动态规划解法,定义dp数组,dp[i]是nums[i]结尾的最长递增咨询列的长度。base case nums只有一个元素,最长递增子序列是自己。dp[0] = 1;求整个数组的最长子序列就是求dp数组最大值。找出状态转移方程。f(n)=maxf(i)+1其中i<n且a[i]<a[n]。 解题答案: class Solution { public int lengthOfLIS(int[] nums) { int[]dp...

2022-01-18 19:19:34 231

原创 LeetCode 304. 二维区域和检索 - 矩阵不可变

问题描述: 解题思路: 采用前缀和数组方式求解,维护一个二维preSum数组,专门记录以原点为顶点的矩阵的元素之和。结果等于preSum[x2+1][y2+1]-preSum[x1][y2+1]-preSum[x2+1][y1]+preSum[x1][y1]。 题解: class NumMatrix { private int[][]preSum; public NumMatrix(int[][] matrix) { int m = matr...

2022-01-04 20:48:24 173

原创 LeetCode 303. 区域和检索 - 数组不可变

问题描述: 解题思路: 采用前缀和数组。初始化时,新建一个前缀和数组,用来保存数组第位置的前缀和,查询时,直接用前缀数组和数组高位-前缀数组和数组低位,就可以得到区间数组和。 题解: class NumArray { private int[]sum; public NumArray(int[] nums) { sum = new int[nums.length+1]; for(int i = 1;i<sum.length;i++){

2022-01-04 19:46:54 3329

原创 LeetCode 三数之和

问题描述: 解题思路: 排序加双指针。 题解: class Solution { public List<List<Integer>> threeSum(int[] nums) { int n = nums.length; Arrays.sort(nums); List<List<Integer>> res = new ArrayList<List<Integer>>

2022-01-03 21:30:00 83

原创 LeetCode 11. 盛最多水的容器

问题描述: 解题思路: 和接雨水类问题类似,采用双指针,定义两个指针一个从左向右移动,一个从右向左移动。面积等于 Math.min(height[left],min[right])*(right-left)。实时计算面积,找到最多的结果,就是最多盛的水。 题解: class Solution { public int maxArea(int[] height) { int left = 0; int right = height.length-1..

2022-01-03 18:49:27 342

原创 LeetCode 42. 接雨水

问题描述: 解题思路: 数组处能接的做多的雨水和它左右两边最高的柱子有关。应该为:Math.min(max_left,max_right)。 题解1(暴力解法): int trap(int[] height) { int n = height.length; int res = 0; for (int i = 1; i < n - 1; i++) { int l_max = 0, r_max = 0; // 找右边最高的柱子

2022-01-02 18:24:57 3629

原创 LeetCode 200. 岛屿数量

问题描述: 解题思路: 遍历二位数组,找到‘1’的陆地,采用dfs广度优先遍历改点上下左右所有的点,将‘1’的陆地全部淹没成‘0’,该点向四周扩散,直到扩散到该点周围没有陆地了终止,记作一个岛屿。以此类推。 题解: class Solution { public int numIslands(char[][] grid) { int m = grid.length; int n = grid[0].length; int res = 0;

2022-01-02 17:21:25 313

原创 LeetCode 146. LRU 缓存

问题描述: 解题思路: 采用哈希表+双向链表较为方便时间。双向链表便于维护数据最近使用再前,最久未使用在后。双向链表便于移动删除。 题解: class LRUCache { class DLinkedNode{ int key; int value; DLinkedNode prev; DLinkedNode next; public DLinkedNode(){}; public D

2022-01-01 22:36:45 517

原创 LeetCode 102. 二叉树的层序遍历

问题描述: 解题思路: 二叉树层序遍历采用队列。 实现: import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integ

2021-12-28 20:55:01 100

原创 LeetCode 125. 验证回文串

问题描述: 解题思路:最简单办法采用双指针,p1从头走,p2从尾部走,验证p1和p2指向的字符是否相等。 注意一点体感中只考虑字母和数字字符,忽略大小写,所以预先对字符串进行过滤。 题解: class Solution { public boolean isPalindrome(String s) { StringBuffer sb = new StringBuffer(); for(int i = 0;i<s.length();i++){ char

2021-12-28 20:41:25 2621

原创 LeetCode 53. 最大子数组和

问题描述: 解题思路: 采用动态规划思路,定义已num[i]结尾的最大子数组的和为dp[i],转移方程为: dp[i] = Math.max(nums[i],nums[i]+dp[i-1]) 。然后遍历dp数组,找出最大值。该值为nums的最大子数组。 题解: class Solution { public int maxSubArray(int[] nums) { int p = nums.length; int[]dp = new int[p]; .

2021-12-27 20:31:18 420

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

问题描述: 解题思路: 输入的两个数组为有序的。新建一个数组int[m+n]。将nums1和nums2元素两两比较,放入int[m+n]中,再重新把int[m+n]放回nums1中。合并完毕。 题解: class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int p1 = 0; int p2 = 0; int cur = 0; .

2021-12-27 20:22:51 426

原创 LeetCode 230. 二叉搜索树中第K小的元素

问题描述: 解题思路: 二叉搜索树性质 中序遍历结果是有序的。 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(.

2021-12-27 09:43:42 899

原创 LeetCode105. 从前序与中序遍历序列构造二叉树

问题描述 解题思路: 前序遍历root节点在数组最前面,所以前序遍历的数组第一个就是root节点,找到root节点,遍历中序遍历的数组,找到root节点在中序遍历数组的index。中序遍历找到root节点位置,root节点左右就是root节点的左/右子树。index-中序遍历的其实值就是左子树的个数(leftSize)。有leftSize数组中左子树边界,右子树边界,root节点index全都已知。可以递归构建二叉树了。 代码实例: /** * Definition for a bin..

2021-12-26 19:02:09 392

原创 LeetCode 654 最大二叉树

问题描述: 解题思路: 遍历数组找出最大的数作为root节点。把数组以最大值为分界线,将数组分为两个子数组。以同样的思路递归左右两个子数组,构建出最大二叉树。 题解: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNod...

2021-12-26 17:26:52 183

原创 剑指 Offer 24. 反转链表

问题描述: 解题思路: 在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。 题解: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ c

2021-12-26 12:02:14 90

原创 LeetCode 114. 二叉树展开为链表

问题描述: 解题思路: 1,先将左子树展开为单链表,再把右子树展开为单链表。 2,把左子树作为右子树。 3,把原来右子树接到现在右子树尾部,形成新的链表。 题解: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.v.

2021-12-26 11:39:19 94

原创 LeetCode 116 填充每个节点的下一个右侧节点指针

问题描述: 解题思路: 把每一层的节点穿起来即可 ,先把属于同一个父节点的左右两个节点穿起来(4->5,6->7)。在把不属于一个父节点的穿起来(5->6)。 解题结果: /* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node next; public Node() {} public No.

2021-12-26 11:14:39 210

原创 LeetCode 226 翻转

问题: 解题思路: 把一个二叉树的 每一个节点的左右子树交换就会得到一个翻转之后的二叉树。 解题结果: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val

2021-12-26 10:50:24 279

空空如也

空空如也

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

TA关注的人

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