自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿财继续努力

学习ing...

  • 博客(653)
  • 资源 (1)
  • 收藏
  • 关注

原创 2022.03.18 - NC071.BM101 设计LFU缓存结构

文章目录1. 题目2. 思路(1) 哈希表+优先队列3. 代码1. 题目2. 思路(1) 哈希表+优先队列哈希表count存储key和调用该key的次数和时间,哈希表data存储真正的数据,优先队列存储key,按照调用次数从小到大排序,调用次数相等时,按照调用时间从小到大排序。3. 代码import java.util.ArrayList;import java.util.HashMap;import java.util.PriorityQueue;public class Sol

2022-03-18 18:00:20 595

原创 2022.03.18 - NC070.BM100 设计LRU缓存结构

文章目录1. 题目2. 思路(1) 队列+哈希表3. 代码1. 题目2. 思路(1) 队列+哈希表利用队列维护key的淘汰顺序,每次get或set,若存在key,则将key从队列中删除,重新加入队尾。利用哈希表存储真实的key-value数据。3. 代码import java.util.HashMap;import java.util.LinkedList;import java.util.Map;import java.util.Queue;public class Tes

2022-03-18 10:01:57 438 1

原创 2022.03.17 - NC069.BM99 顺时针旋转矩阵

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法首先按照反对角线翻转数组,再按照水平对称翻转数组即可。3. 代码public class Test { public static void main(String[] args) { }}class Solution { public int[][] rotateMatrix(int[][] mat, int n) { for (int i = 0; i &

2022-03-18 09:44:03 389

原创 2022.03.17 - NC068.BM97 旋转数组

文章目录1. 题目2. 思路(1) 双指针法3. 代码1. 题目2. 思路(1) 双指针法首先对整个数组进行旋转,然后分别对前m个元素的子数组和后n-m个元素的子数组进行旋转即可。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 旋转数组 * * @param n int整型 数组长度 *

2022-03-17 17:53:07 323

原创 2022.03.17 - NC067.BM96 主持人调度(二)

文章目录1. 题目2. 思路(1) 优先队列3. 代码1. 题目2. 思路(1) 优先队列先对活动时间按照开始时间从小到大排序,若开始时间相同,则按照结束时间从小到大排序。优先队列中存放的是之前活动的结束时间,若当前活动的开始时间大于等于最近一个活动的结束时间,则弹出该活动的结束时间,即让该活动的主持人继续主持当前活动。3. 代码import java.util.Arrays;import java.util.PriorityQueue;public class Test {

2022-03-17 10:52:34 625

原创 2022.03.17 - NC066.BM95 分糖果问题

文章目录1. 题目2. 思路(1) 贪心算法3. 代码1. 题目2. 思路(1) 贪心算法先从左往右遍历,若arr[i]>arr[i-1],则sum[i]=sum[i-1]+1,否则sum[i]=1,初始时sum[0]=1。再从右往左遍历,若arr[i]>arr[i+1],则sum[i]=max(sum[i],sum[i+1]+1),否则sum[i]=max(sum[i],1),同时统计所有糖果的数量。3. 代码public class Test { public s

2022-03-17 10:06:44 546

原创 2022.03.16 - NC065.BM94 接雨水问题

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i]表示下标i左边最高的柱子的高度,从左往右遍历数组后,计算出所有的dp[i]。再从右往左遍历数组,维护一个右边最高的柱子的高度,对于下标i,其能存储的雨水的体积是max(min(dp[i],max)-arr[i],0)。3. 代码public class Test { public static void main(String[] args) { }}class So

2022-03-16 20:01:23 219

原创 2022.03.16 - NC064.BM93 盛水最多的容器

文章目录1. 题目2. 思路(1) 双指针法3. 代码1. 题目2. 思路(1) 双指针法利用双指针法从两侧向内缩小区间,寻找最大容量。无论是短板还是长板向内移动,底边的长度都会减1,若短板向内移动,则短板可能变长,容量可能增加;若长板向内移动,由于短板不变,容量一定缩小,因此,每次都选择短板向内移动。3. 代码public class Test { public static void main(String[] args) { }}class Solutio

2022-03-16 13:29:30 153

原创 2022.03.16 - NC063.BM92 最长无重复子数组

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法利用HashSet存储当前左右指针区间内的元素,维护一个全局最长无重复子数组的长度即可。3. 代码import java.util.HashSet;import java.util.Set;public class Test { public static void main(String[] args) { }}class Solution { /** *

2022-03-16 11:48:59 167

原创 2022.03.16 - NC062.BM90 最小覆盖子串

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法利用HashMap存储各个字符的数量,利用双指针法统计包含所有字符的区间,若区间长度小于最小长度,则更新最小覆盖子串。3. 代码import java.util.HashMap;public class Test { public static void main(String[] args) { }}class Solution { /** * @param

2022-03-16 11:32:36 185

原创 2022.03.16 - NC061.BM89 合并区间

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法首先按照start对区间进行排序,然后遍历区间,同时维护前一个区间的start和end。若当前区间的start<=前一个区间的end,则将当前区间与前一个区间合并,并更新前一个区间的end;否则,将前一个区间加入结果集,同时更新start和end。3. 代码import java.util.ArrayList;import java.util.Collections;public class

2022-03-16 10:29:19 237

原创 2022.03.15 - NC060.BM86 大数加法

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法从低位开始模拟相加,记录进位的大小,加到高一位的结果中。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * *

2022-03-15 10:39:36 159

原创 2022.03.15 - NC059.BM85 验证IP地址

文章目录1. 题目2. 思路(1) 模拟法3. 代码1. 题目2. 思路(1) 模拟法首先区分出是IPv4还是IPv6,然后根据各自的规则进行判断即可。3. 代码import java.util.HashSet;import java.util.Set;public class Test { public static void main(String[] args) { }}class Solution { /** * 验证IP地址

2022-03-15 10:27:39 216

原创 2022.03.14 - NC058.BM82 买卖股票的最好时机(三)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i][0]表示第i天完成第一次买入股票的总收益,dp[i][1]表示第i天完成第一次卖出股票的总收益,dp[i][2]表示第i天完成第二次买入股票的总收益,dp[i][3]表示第i天完成第二次卖出股票的总收益。对于每一种状态,要么是前一天完成了该状态,今天什么都不做;要么是前一天完成了前一个状态,今天完成了该状态。3. 代码public class Test { public sta

2022-03-14 22:39:48 235

原创 2022.03.14 - NC057.BM81 买卖股票的最好时机(二)

文章目录1. 题目2. 思路(1) 贪心算法3. 代码1. 题目2. 思路(1) 贪心算法如果今天的价格高于昨天的价格,那么就昨天买入今天卖出。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 *

2022-03-14 21:43:28 236

原创 2022.03.14 - NC056.BM79 打家劫舍(二)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划当最后一家和第一家连起来后,从整体来看,要么不偷最后一家,偷第一家;要么偷最后一家,不偷第一家。分别计算区间为[1,n-1]的dp[n-1]和区间为[2,n]的dp[n],返回较大值。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /**

2022-03-14 21:35:29 249

原创 2022.03.14 - NC055.BM78 打家劫舍(一)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i]表示在前i个房间能偷到的最大金额。对于第i-1家,要么不偷,要么偷,因此,dp[i]=max(dp[i-1],dp[i-2]+nums[i-1])。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 代码中的类名、方法名、

2022-03-14 21:24:23 792

原创 2022.03.14 - NC054.BM77 最长的括号子串

文章目录1. 题目2. 思路(1) 栈3. 代码1. 题目2. 思路(1) 栈栈中存放的是左括号的下标,若遇到右括号,则弹出与其匹配的最近的左括号,同时更新匹配的长度。3. 代码import java.util.Deque;import java.util.LinkedList;public class Test { public static void main(String[] args) { }}class Solution { /**

2022-03-14 13:06:02 194

原创 2022.03.13 - NC053.BM76 正则表达式匹配

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i][j]表示str中前i个字符的子串和pattern中前j个字符的子串是否匹配。重点在于当pattern[j-1]=’*'时的情况,若str[i-1]=pattern[j-2],则dp[i][j]=dp[i-1][j]||dp[i][j-2]。3. 代码public class Test { public static void main(String[] args) {

2022-03-13 16:29:40 275

原创 算法总结 - 002.排序

文章目录0. 排序1. 快速排序2. 归并排序3. 堆排序4. 代码0. 排序常用的排序有快速排序、归并排序、堆排序。下面列出各个排序所包含的方法,便于记忆。1. 快速排序sort(int[] arr)sort(int[] arr, int left, int right)2. 归并排序sort(int[] arr)sort(int[] arr, int left, int right)merge(int[] arr, int left, int mid, int right)

2022-03-11 11:17:00 159

原创 2022.03.11 - NC052.BM75 编辑距离(一)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划题目中的3种操作可以转化为:向str1中插入一个字符;向str2中插入一个字符;修改str1中的一个字符。dp[i][j]表示str1的前i个字符的子串转化为str2的前j个字符的子串所需的最少操作数。若chars1[i-1]=chars2[j-1],则dp[i][j]=dp[i-1][j-1];否则,根据上面的3种操作,要么去掉chars1[i-1],向str1中插入chars2[j-1

2022-03-11 10:30:28 168

原创 2022.03.10 - NC051.BM74 数字字符串转化成IP地址

文章目录1. 题目2. 思路(1) 回溯法3. 代码1. 题目2. 思路(1) 回溯法利用回溯法找出符合条件的四个子字符串,每个子字符串的长度为[1,3],数值大小为[0,255],且要保证四个子字符串正好用完所有字符,不能多也不能少。若某个子字符串的第一位是0,则直接跳到下一个子字符串。3. 代码import java.util.ArrayList;public class Test { public static void main(String[] args) {

2022-03-10 17:07:27 187

原创 2022.03.10 - NC050.BM73 最长回文子串

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i][j]表示下标为[i,j]的子串是否是回文串。若子串两端的字符相等,且中间的子串是回文串,则该子串也是回文串,同时维护一个全局变量,表示最长回文子串的长度。外层循环从后往前遍历,内层循环从前往后遍历,保证子串内的任意子串已经被判断过。3. 代码public class Test { public static void main(String[] args) { }}

2022-03-10 11:32:34 107

原创 2022.03.10 - NC049.BM71 最长上升子序列(一)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i]表示以下标i结尾的子数组的最长严格上升子序列的长度,每计算一个dp[i],都需要将arr[i]与前面每一个元素进行比较,若大于,则更新dp[i],同时维护一个全局最长的长度。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** *

2022-03-10 10:41:02 152

原创 2022.03.10 - NC048.BM69 把数字翻译成字符串

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i]表示下标为[0,i)的子字符串的译码数,分别处理四种状态转移的情况即可。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 解码 * * @param nums string字符串 数字串 *

2022-03-10 10:15:14 261

原创 2022.03.09 - NC047.BM68 矩阵的最小路径和

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划由于只能从(i-1,j)或者(i,j-1)到达(i,j),因此,dp[i][j]+=Math.min(dp[i-1][j],dp[i][j-1])。初始化时,第一列和第一行的单元格只能从一个方向到达,直接计算即可。3. 代码public class Test { public static void main(String[] args) { }}class Solution

2022-03-09 22:58:01 99

原创 2022.03.09 - NC046.BM66 最长公共子串

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i][j]表示str1中以下标i-1结尾的子字符串和str2中以下标j-1结尾的子字符串的最长公共子串。若chars1[i-1]==chars2[j-1],则dp[i][j]=dp[i-1][j-1]+chars1[i-1],同时,更新全局最长公共子串;否则,dp[i][j]=""。3. 代码public class Test { public static void main(Str

2022-03-09 17:30:17 234

原创 2022.03.09 - NC045.BM65 最长公共子序列(二)

文章目录1. 题目2. 思路(1) 动态规划3. 代码1. 题目2. 思路(1) 动态规划dp[i][j]表示s1中下标为[0,i)的子字符串与s2中下标为[0,j)的子字符串的最长公共子序列。若chars[i-1]==chars[j-1],则dp[i][j]=dp[i-1][j-1]+chars[i-1];否则,dp[i][j]取dp[i-1][j]和dp[i][j-1]中较长的一个。3. 代码public class Test { public static void mai

2022-03-09 09:46:07 1041

原创 2022.03.08 - NC044.BM61 矩阵最长递增路径

文章目录1. 题目2. 思路(1) 回溯3. 代码1. 题目2. 思路(1) 回溯利用深度优先搜索遍历所有路径,若要从当前单元格跳到下一个单元格,则将当前单元格的值置为相反数,回溯时再次置为相反数。3. 代码public class Test { public static void main(String[] args) { }}class Solution { public int res; /** * 代码中的类名、方法名、参数名已

2022-03-08 17:44:55 332

原创 2022.03.08 - NC043.BM60 括号生成

文章目录1. 题目2. 思路(1) DFS3. 代码1. 题目2. 思路(1) DFS由于每个位置上不是左括号就是右括号,因此,可以利用深度优先搜索遍历出所有结果。对于一个合法组合,其任意前缀的左括号数量大于等于右括号数量。3. 代码import java.util.ArrayList;public class Test { public static void main(String[] args) { }}class Solution { /**

2022-03-08 14:54:39 146

原创 2022.03.08 - NC042.BM59 N皇后问题

文章目录1. 题目2. 思路(1) 回溯+HashSet3. 代码1. 题目2. 思路(1) 回溯+HashSet利用回溯遍历所有可能,利用HashSet存储已放置皇后的列、正对角线、反对角线,正对角线用row+col唯一标识,反对角线用row-col唯一标识。3. 代码import java.util.HashSet;public class Test { public static void main(String[] args) { }}class Solu

2022-03-08 09:53:19 127

原创 2022.03.08 - NC041.BM58 字符串的排列

文章目录1. 题目2. 思路(1) 回溯+HashSet3. 代码1. 题目2. 思路(1) 回溯+HashSet利用回溯遍历全排列的结果,利用HashSet去重。3. 代码import java.util.ArrayList;import java.util.HashSet;public class Test { public static void main(String[] args) { }}class Solution { public Ar

2022-03-08 09:33:25 143

原创 2022.03.07 - NC040.BM57 岛屿数量

文章目录1. 题目2. 思路(1) DFS3. 代码1. 题目2. 思路(1) DFS每发现一块陆地,对其进行深度优先搜索,将与其相连的’1’全部修改成’0’。3. 代码public class Test { public static void main(String[] args) { }}class Solution { /** * 判断岛屿数量 * * @param grid char字符型二维数组 * @ret

2022-03-07 21:49:53 257

原创 2022.03.07 - NC039.BM56 有重复项数字的全排列

文章目录1. 题目2. 思路(1) 回溯3. 代码1. 题目2. 思路(1) 回溯利用mask数组标记每个元素是否被选取,若某个数已经被选取,或者该数与前一个数相等且前一个数未被选取,则此次选取跳过该数。当某个数与前一个数相等且前一个数未被选取时,说明此次选择已经是从后往前选取了,出现了重复情况。3. 代码import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;public cl

2022-03-07 19:52:09 93

原创 2022.03.07 - NC038.BM55 没有重复项数字的全排列

文章目录1. 题目2. 思路(1) 回溯3. 代码1. 题目2. 思路(1) 回溯利用回溯+交换元素实现全排列。3. 代码import java.util.ArrayList;public class Test { public static void main(String[] args) { }}class Solution { public ArrayList<ArrayList<Integer>> permute(int[]

2022-03-07 19:20:21 66

原创 2022.03.07 - NC037.BM54 三数之和

文章目录1. 题目2. 思路(1) 双指针法3. 代码1. 题目2. 思路(1) 双指针法首先对数组进行快速排序,然后遍历数组,确定a值后,利用双指针法从后面数组的两端开始往中间移动,找到使a+b+c=0的元素。注意找到后不能直接返回,中间可能还有其他答案,需要继续移动。3. 代码import java.util.ArrayList;import java.util.Arrays;public class Test { public static void main(Str

2022-03-07 15:38:12 142

原创 2022.03.07 - NC036.BM53 缺失的第一个正整数

文章目录1. 题目2. 思路(1) 哈希表3. 代码1. 题目2. 思路(1) 哈希表利用原数组作为哈希表,若出现正整数m,则将下标为m-1的元素置为负数。对于数组中原来的负数,需要先遍历一遍数组,将所有小于等于0的元素全部置为n+1。再次遍历数组时,需要先对元素取绝对值,若其绝对值的范围是[1,n],则表示该元素是被其他元素置为负数的,即该下标上存在对应的正整数i+1。最后遍历数组时,若存在大于0的元素,则表示正整数i+1不存在,否则,不存在的最小正整数是n+1。3. 代码publ

2022-03-07 15:12:53 112

原创 2022.03.07 - NC035.BM52 数组中只出现一次的两个数字

文章目录1. 题目2. 思路(1) 位运算3. 代码1. 题目2. 思路(1) 位运算将所有数字进行异或运算,结果即为两个只出现一次的数字进行异或运算的结果。找出该结果中任意一位值为1的二进制位,根据该二进制位,可以将所有数字分为两组,两个只出现一次的数字必定各在一组,其他数字必定两两出现在某一组。分别对两组中所有数字进行异或运算,即可得到两个只出现一次的数字。3. 代码public class Test { public static void main(String[] a

2022-03-07 09:57:26 128

原创 2022.03.06 - NC034.BM49 表达式求值

文章目录1. 题目2. 思路(1) 栈3. 代码1. 题目2. 思路(1) 栈利用一个栈存放操作数,另一个栈存放操作符。若遇到左括号,则直接压入操作符栈中;若遇到右括号,则弹出操作符栈的栈顶元素,以及两个操作数栈的栈顶元素进行计算,结果压入操作数栈中,如此循环,直到操作符栈的栈顶元素是左括号,则直接弹出即可。若遇到数字,则直接压入操作数栈中。若遇到操作符,可以先判断操作符栈的栈顶元素的优先级是否大于或等于当前操作符,若大于或等于,则可以先将之前的操作计算出来,然后再将操作符压入操作符栈中。

2022-03-06 22:40:13 292

原创 2022.03.06 - NC033.BM48 数据流中的中位数

文章目录1. 题目2. 思路(1) 堆排序3. 代码1. 题目2. 思路(1) 堆排序每次加入新元素,都对原列表进行堆排序。要对列表进行从小到大的排序,需要构建大顶堆,然后不断将堆顶元素交换到后面即可。3. 代码import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { }}class Solution

2022-03-06 10:56:52 106

ECMA-334_5th_edition_december_2017.docx

C#5.0语言规范,原版PDF目录有问题,转换成Word后修复了目录!

2021-03-30

空空如也

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

TA关注的人

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