自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 餐厅过滤器(自定义排序)

一、题目给你一个餐馆信息数组 restaurants,其中 restaurants[i] = [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息。其中素食者友好过滤器 veganFriendly 的值可以为 true 或者 false,如果为 true 就意味着你应该只包括 veganFriendlyi 为 true 的餐馆,为 false 则意味着可以包括任何餐馆。此外,我们还有最大价格 maxPrice 和

2022-02-13 21:37:39 186

原创 长度最小的子数组(前缀和+二分 、滑动窗口)

一、题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3

2022-02-13 14:52:00 176

原创 车队(空间换时间典型方法)

一、题目N 辆车沿着一条车道驶向位于 target 英里之外的共同目的地。每辆车 i 以恒定的速度 speed[i] (英里/小时),从初始位置 position[i] (英里) 沿车道驶向目的地。一辆车永远不会超过前面的另一辆车,但它可以追上去,并与前车以相同的速度紧接着行驶。此时,我们会忽略这两辆车之间的距离,也就是说,它们被假定处于相同的位置。车队 是一些由行驶在相同位置、具有相同速度的车组成的非空集合。注意,一辆车也可以是一个车队。即便一辆车在目的地才赶上了一个车队,它们仍然会被视作是

2022-01-15 23:40:38 160

原创 岛屿的最大面积(DFS)

一、题目给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。链接:https://leetcode-cn.com/problems/max-area-of-island二、思路典型的岛屿问题,四个方向进

2022-01-15 20:10:48 187

原创 爱吃香蕉的珂珂(二分法左边界)

一、题目珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: piles = [3,6,7,11], H = 8输出

2022-01-15 20:05:30 82

原创 和为 K 的子数组(前缀和)

一、题目给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。示例 1:输入:nums = [1,1,1], k = 2输出:2示例 2:输入:nums = [1,2,3], k = 3输出:2提示:1 <= nums.length <= 2 * 104-1000 <= nums[i] <= 1000-107 <= k <= 10链接:https://leetcode-cn.com/problems/su

2022-01-15 20:01:34 310

原创 航班预订统计(差分数组)

一、题目这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。示例 1:输入:bookings = [[1,2,10],[2,3,20],[2,5,25]

2022-01-15 19:49:38 126

原创 查找和最小的K对数字(top k问题优先队列)

一、题目给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。示例 1:输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3输出: [1,2],[1,4],[1,6]解释: 返回序列中的前 3 对数:[1,2],[1,4],[1,6],[7,2],[7,4

2022-01-09 22:55:34 384

原创 最多可以参加的会议数目(贪心)

一、题目给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be

2022-01-09 19:02:50 472

原创 无重叠区间(贪心算法)

一、题目给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。链接:https://leetcode-cn.com/problems/non-overlapping-intervals二、思路区间调度问题使用贪心算法。贪心算法

2022-01-09 18:49:34 822

原创 路径总和(DFS、回溯、BFS)

一、题目给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。链接:https://leetcode-cn.com/problems/path-sum二、答案DFS:对于树来说DFS即为先序遍历。class TreeNode { int val; TreeNode le

2022-01-09 18:41:57 98

原创 在 D 天内送达包裹的能力(二分法左边界)

一、题目传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], days = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天

2022-01-03 22:48:47 310

原创 n皇后(回溯)

1.题目n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。2.答案回溯解决棋盘问题import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Objects

2022-01-03 20:52:18 64

原创 接雨水(暴力、备忘录、双指针)

1、题目2、答案暴力:下标 ii处能接的雨水量等于下标 i两边的最大高度的最小值减去height[i]。public class Rain { /** * 暴力二重循环 * @param height * @return */ public int trap(int[] height) { int sum = 0; //下标是1 到 height.length - 1。0和 height.length - 1在边

2022-01-03 20:46:25 67

原创 行星碰撞( 暴力从左遍历 + 栈)

思路i >= 0这个条件,属于边界条件,不写会卡用例,1, -2, -2, -2。import java.util.Arrays;class Suit { public static int[] asteroidCollision(int[] asteroids) { int len = asteroids.length; int size = len; for (int i = 0; i < size - 1; i++) { .

2021-10-10 18:37:32 88

原创 排列硬币(左侧边界的二分法)

一、题目二、思路直接循环会超时,此时要考虑二分。二分要注意两个问题,一个是边界。一个就是溢出。此题下标定义long类型就不会溢出。还是要多刷题,总结经验。class Solution { public int arrangeCoins(int n) { long low = 1; long high = n; while (low <= high) { long mid = (high - low) / 2 +

2021-09-25 19:08:39 99

原创 座位预约管理系统

一、题目二、思路普通思路,大用例过不了class SeatManager { private int num; private List<Integer> seatList; public SeatManager(int n) { num = n; seatList = new ArrayList<>(num); for (int i = 0; i < n; i++) {

2021-09-25 19:02:45 394

原创 三角形的最大周长

一、题目二、思路循环中的i–,有的时候总是考虑成i = i -2。class Solution { public int largestPerimeter(int[] nums) { Arrays.sort(nums); int len = nums.length; for (int i = len - 1; i >= 2; i --) { if (isTri(nums[i], nums[i - 1], nums

2021-09-25 18:55:52 90

原创 设计循环队列

一、题目二、代码从这道题的测试用例可以看出这种循环队列font和rear初始化时,font位于-1,rear位于0,和传统的循环队列有点区别。因此刷力扣前,一定要看准测试用例,以免浪费时间。class MyCircularQueue { private int[] queue; private int font; private int rear = -1; private int size; private int eleNum; pub

2021-09-25 18:50:01 122

原创 Excel表列名称

一、题目二、代码注意边界值26相关的例如52class Solution { private static char[] ch = new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; public static String convert

2021-09-25 18:37:51 84

原创 重新格式化电话号码(字符串)

这样的题一般都是简单难度,其思路就是找规律,找到规律都会很简单。代码class Solution { public String reformatNumber(String number) { String str = getStr(number); int len = str.length(); if(len <= 3){ return str; } return getS...

2021-09-05 17:14:24 203

原创 整理字符串(栈 + 暴力)

代码import java.util.Stack;class Solution { public String makeGood(String inputStr) { Stack<Character> stack = new Stack<>(); int len = inputStr.length(); for (int i = 0; i < len; i++) { if (inp...

2021-09-05 17:10:45 84

原创 猜数字大小(二分法)

一、题目二、代码这个题目比较难理解,总之要使用预定的接口。使用二分方法策略猜数字,注意边界。/** * Forward declaration of guess API. * @param num your guess * @return -1 if num is lower than the guess number * 1 if num is higher than the guess number * ..

2021-08-29 17:43:06 252

原创 验证回文字符串 Ⅱ(双指针)

一、题目二、代码双指针 。使用判断回文子串原始的方法,分别指向首尾字符。注意:i++、 j--不能单纯用于减一,因为会赋值。class Solution { public static boolean validPalindrome(String s) { int i = 0; int j = s.length() - 1; while(i < j){ if(s.charAt(i) == s.ch...

2021-08-29 12:24:37 170

原创 多数元素(分治)

一、题目二、代码本题可以用哈希表、排序去做,但是这次使用分治。分治即分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。class Solution { public int majorityElement(int[] nums) { return majorityElementRec(nums, 0, nums.length - 1); } ...

2021-08-22 19:58:32 362

原创 长度为三且各字符不同的子字符串(滑动窗口)

一、题目二、代码滑动窗口。注意substring的用法,第二个参数是下标,而且不包括这个下标。class Solution { //定义一个长度为3的滑动窗口 public int countGoodSubstrings(String s) { int windowLen = 3; int len = s.length(); int goodNum = 0; for(int i = 0; i < le..

2021-08-22 18:05:12 180

原创 二维区域和检索 - 矩阵不可变(二维前缀和数组)

一、题目二、代码前缀和二维数组,列数要加1class NumMatrix { //二维前缀和数组 private int[][] preSum; public NumMatrix(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; preSum = new int[m][n + 1]; for(int i = 0; i..

2021-08-21 19:07:58 70

原创 网络延迟时间(迪杰斯特拉)

一、题目二、代码class Solution { public int networkDelayTime(int[][] times, int n, int k) { final int INF = Integer.MAX_VALUE / 2; // 邻接矩阵存储边信息 int[][] graph = new int[n][n]; for (int i = 0; i < n; ++i) { .

2021-08-21 17:11:48 233

原创 划分为k个相等的子集(状态压缩)

一、题目二、代码class Solution { public boolean canPartitionKSubsets(int[] nums, int k) { if (k == 1) { return true; } int len = nums.length; Arrays.sort(nums); int sum = 0; for (int num : n..

2021-08-21 17:05:05 198

原创 O(1) 时间插入、删除和获取随机元素

一、题目二、代码时间复杂度o(1),不能有for循环class RandomizedSet { //只要存在for循环时间复杂度就不是o(1)了,保证时间复杂度就需要以空间换时间 private List<Integer> list = null; private Map<Integer, Integer> hashMap = null; private Random random = new Random(); /**..

2021-08-21 16:59:05 144

原创 股票价格跨度(单调栈)

一、题目二、代码单调栈class StockSpanner { //定义单调栈单调递减存储估价stock Stack<Integer> stockStack = null; //定义天数栈 Stack<Integer> daysStack = null; public StockSpanner() { stockStack = new Stack<>(); daysStack =.

2021-08-21 16:51:10 113

原创 重复的DNA序列(滑动窗口 )

一、题目二、代码滑动窗口class Solution { //滑动窗口 + hashSet去重 public List<String> findRepeatedDnaSequences(String s) { int windowLen = 10; int len = s.length(); Set<String> DnaSet = new HashSet<>(); /...

2021-08-21 16:48:18 373

原创 区域和检索 - 数组不可变(前缀和)

一、题目二、代码前缀和class NumArray { //定义前缀数组 private int[] preSum; public NumArray(int[] nums) { int n = nums.length; preSum = new int[n]; preSum[0] = nums[0]; for(int i = 1; i < n; i++){ preSu..

2021-08-21 16:45:24 71

原创 计数质数(埃及筛)

一、题目二、代码暴力解法。从质数n的定义入手,遍历从2到n-1,如果取余为0则为合数。可以优化即不用遍历到n-1,而是到根号n。class Solution { public int countPrimes(int n) { int count = 0; for (int i = 2; i < n; i++) { if (isPrime(i)) { count++; .

2021-08-21 16:42:16 667

原创 连接所有点的最小费用(克鲁斯卡尔)

一、题目二、思路最小生成树class Solution { public int minCostConnectPoints(int[][] points) { int n = points.length; UnionFind uf = new UnionFind(n); //边集数组 List<Edge> edges = new ArrayList<Edge>(); for (..

2021-08-15 18:30:59 152

原创 按序打印(并发编程)

一、题目二、思路原子操作类(乐观锁)class Foo { private AtomicInteger firstDone = new AtomicInteger(0); private AtomicInteger secondDone = new AtomicInteger(0); public Foo() {} public void first(Runnable printFirst) throws InterruptedException { pri.

2021-08-15 14:00:18 105

原创 最大正方形(动态规划)

一、题目在一个由'0'和'1'组成的二维矩阵内,找到只包含'1'的最大正方形,并返回其面积。二、思路动态规划。dp(i,j) 表示以 (i,j) 为右下角,且只包含 1 的正方形的边长最大值。如果(i,j)位置的值是 0,则 dp(i,j)=0;如果该位置的值是 1,则 dp(i,j) 的值由其上方、左方和左上方的三个相邻位置的dp 值决定。具体而言,当前位置的元素值等于三个相邻位置的元素中的最小值加 1,状态转移方程如下:dp(i,j)=min(dp(i−1,j),dp(i...

2021-08-15 12:52:36 331

原创 颠倒二进制位

一、题目二、思路jdk自带函数public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { return Integer.reverse(n); }}位运算public class Solution { // you need treat n as an unsigned value ..

2021-08-14 18:08:14 58

原创 爬楼梯(记忆化搜索)

此题可用动态规划,暴力递归做。也可以优化暴力递归使用记忆化搜索class Solution { HashMap<Integer,Integer> stepsMap = new HashMap(); public int climbStairs(int n) { if(n == 1){ return 1; } if(n == 2){ return 2; } ..

2021-08-14 17:42:44 98

原创 课程表(拓扑排序)

一、题目二、思路拓扑排序判断此课程安排图是否是有向无环图。入度数组:课号 0 到 n - 1 作为索引,通过遍历先决条件表求出对应的初始入度。邻接表:用哈希表记录依赖关系其中key为课号,value为依赖这门课的后续课。最后如果入度数组中还存在不等于0的元素则存在环,不存在拓扑排序。...

2021-08-14 16:58:31 152

空空如也

空空如也

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

TA关注的人

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