自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 407.接雨水II

题目描述:给你一个m x n的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。解题思路:从最外层访问,用优先队列记录最小高度class Solution { public int trapRainWater(int[][] heightMap) { int m = heightMap.length, n = heightMap[0].length; if(m <= 2 || n <= 2) {..

2021-11-03 12:39:53 162

原创 leetcode 918.环形子数组的最大和

题目描述:给定一个由整数数组 A表示的环形数组 C,求 C的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length时C[i] = A[i],且当i >= 0时C[i+A.length] = C[i])此外,子数组最多只能包含固定缓冲区 A中的每个元素一次。(形式上,对于子数组C[i], C[i+1], ..., C[j],不存在i <= k1, k2 <= j其中k1 % ...

2021-10-09 15:32:35 108

原创 leetcode 567.重复的字符串序列

题目描述:给你两个字符串s1和s2 ,写一个函数来判断 s2 是否包含 s1的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。解题思路:滑动窗口,双指针 (用数组代替字母)解法一:滑动窗口...

2021-10-08 12:27:03 128

原创 leetcode 199.二叉树的

题目描述:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。解题思路:bfs,dfs解法一:bfsclass Solution { public List<Integer> rightSideView(TreeNode root) { List<Integer> ans = new LinkedList<>(); if (root == null) { ..

2021-10-04 13:49:27 98

原创 leetcode 200.岛屿的数量

题目描述:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。解题思路:深搜,广搜,并查集解法一:深搜class Solution { public int numIslands(char[][] grid) { if (grid == null || grid.length == 0) { ...

2021-10-04 11:40:47 67

原创 leetcode 371.两整数之和

两整数之和:给你两个整数a和b,不使用运算符+和-,计算并返回两整数之和。解题思路:位运算class Solution { public int getSum(int a, int b) { while (b != 0) { int carry = (a & b) << 1; a ^= b; b = carry; } return a...

2021-09-26 13:19:43 48

原创 leetcode 191.位1的个数

题目描述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。解题思路:位运算,二分思想解法一:位运算public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int ans = 0; while (n != 0) {

2021-09-22 15:37:41 55

原创 leetcode 94.二叉树的中序遍历

题目描述:给定一个二叉树的根节点root,返回它的中序遍历。解题思路:递归,迭代,Morris 中序遍历解法一:递归class Solution { public List<Integer> ans = new ArrayList<>(); public List<Integer> inorderTraversal(TreeNode root) { inorder(root); return ans;...

2021-09-21 17:48:09 64

原创 leetcode 236.二叉树的最近公共祖先

题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”解题思路:递归,哈希表存储父节点解法一:递归class Solution { private TreeNode ans; public Solution() { this.ans = null;

2021-09-18 11:55:14 55

原创 leetcode 234.回文链表

回文链表:给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。题目思路:递归,双指针解法一:递归class Solution { private ListNode pre; //递归 public boolean isPalindrome(ListNode head) { pre = head; return check(head); } private b...

2021-09-17 16:01:41 49

原创 leetcode 122.买卖股票的最佳时机 II

题目描述:给定一个数组 prices ,其中prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。解题思路:贪心,动态规划解法一:贪心class Solution { public int maxProfit(int[] prices) { int ans = 0; for (int i.

2021-09-16 19:32:58 58

原创 leetcode 33.搜索旋转排序数组

题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 .

2021-09-14 15:28:16 62

原创 leetcode 146.LRU缓存机制

题目描述:设计和实现一个LRU (最近最少使用) 缓存机制实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量capacity 初始化 LRU 缓存;int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 ;void put(int key, int value)如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据...

2021-09-14 10:16:05 77

原创 leetcode 15.三数之和

题目描述:给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路:先排序,然后双指针,且需要注意跳过相同的数解法一:class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<I...

2021-09-13 23:51:53 54

原创 leetcode 155.最小栈

题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。解题思路:辅助栈记录最小值解法一:辅助栈记录最小值class MinStack { Deque<Integer> valStack; Deque<Integer> minStack; ..

2021-09-13 19:33:44 53

原创 leetcode 415.字符串相加

题目描述:给定两个字符串形式的非负整数num1 和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger),也不能直接将输入的字符串转换为整数形式。解题思路:模拟加法的计算过程解法一:class Solution { public String addStrings(String num1, String num2) { StringBuilder ans = new StringBuilder()...

2021-09-13 19:08:27 171

原创 leetcode 103.二叉树的锯齿形层序遍历

题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。解题思路:广度优先遍历解法一:class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> ans = new LinkedList<>();

2021-09-13 00:21:14 66

原创 leetcode 141.环形链表

题目描述:给定一个链表,判断链表中是否有环。解题思路:快慢指针、哈希表解法一:快慢指针public class Solution { public boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } ListNode slow = head, fast = head.next;

2021-09-12 23:49:31 42

原创 leetcode 101.对称二叉树

题目描述:给定一个二叉树,检查它是否是镜像对称的。解题思路:递归、迭代,使用两个指针镜像便利二叉树解法一:递归class Solution { public boolean isSymmetric(TreeNode root) { return check(root, root); } private boolean check(TreeNode p1, TreeNode p2) { if (p1 == null &&

2021-09-12 21:01:40 57

原创 leetcode 215.数组中的第k个最大元素

题目描述:给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。解题思路:快排public int findKthLargest(int[] nums, int k) { myQuickSort(nums,0, nums.length - 1); return nums[nums.length - k];}public void myQuickSort(int[] nums, ...

2021-09-11 12:02:19 129

原创 leetcode 1.两数之和

题目描述:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。解题思路:暴力、哈希表解法一:哈希表public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashM...

2021-09-11 09:29:42 260

原创 leetcode 69.x的平方根

题目描述:给你一个非负整数x,计算并返回x的平方根。由于返回类型是整数,结果只保留整数部分,小数部分将被舍去 。注意:不允许使用任何内置指数函数和算符,例如pow(x, 0.5)或者x ** 0.5。解题思路:二分法解法一:public int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; ...

2021-09-10 12:11:44 44

原创 leetcode 21.合并两个有序链表

题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。解题思路:迭代和递归解法一:递归public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; }else if (l2 == null) { return l1; }else { if (l1.val &lt..

2021-09-09 15:33:30 48

原创 【leetcode】206.反转链表

题目描述:输入一个链表,反转链表后,输出新链表的表头。解题思路:递归和迭代。解法一:递归public ListNode reverseList(ListNode head) { if (head == null || head.next == null) { return head; } ListNode newHead = reverseList(head.next); head.next.next = head; head.next

2021-09-08 22:28:30 51

空空如也

空空如也

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

TA关注的人

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