Map类方法整理(jdk8)
前言
今天在查看力扣周赛385题解时,发现了几个我平时没注意的map方法,看了jdk相关的源码,感觉很巧妙,可以帮我节省代码,于是乎顺带着整个Map类的方法都过了一遍,下面是我看后整理的内容。
Map类中包括了以下方法:
clear()
compute(K,BiFunction<K,V,V>)
computeIfAbsent(K,Function<K,V>)
computeIfPresent(K,BiFunction<K,V,V>)
containsKey(Object)
containsValue(Object)
entrySet()
equals(Object)
forEach(BiConsumer<K,V>)
get(Object)
getOrDefault(Object, V)
hashCode()
isEmpty()
keySet()
merge(K,V,BiFunction<V,V,V>)
put(K,V)
putAll(Map<K,V> ...
win11新电脑环境安装
新的mini主机到了,为了之后的开发方便,需要先安装各种软件,这里记录下需要安装的软件,我这边是以Java为主
Java
我这边Java下载安装的是17版本的,下载地址:Java Downloads | Oracle,下面是下载页面,根据自己电脑的情况安装不同的版本
maven
我使用的是3.6.3,下载地址:maven
nvm
安装包在GitHub中下载的,安装说明也挺详细,地址:nvm-windows
git
官网下载地址:git
nodejs
通过nvm安装LTS版本
1686. 石子游戏 VI(2024-02-02)
力扣每日一题
题目:1686. 石子游戏 VI
日期:2024-02-02
用时:15 m 0 s
时间:103ms
内存:57.95MB
代码:
class Solution {
public int stoneGameVI(int[] aliceValues, int[] bobValues) {
int cnt = aliceValues.length;
int[][] arrs = new int[cnt][2];
for (int i = 0; i < cnt; i++) {
arrs[i] = new int[]{aliceValues[i],bobValues[i]};
}
Arrays.sort(arrs,(a,b)->(b[0]+ b[1])-(a[0]+ a[1]));
int sub = 0;
for ...
2024-01-27-跑章整理
总览
通过几天晚上的整理,规划出了今天的路线,大概上要去下面这些地方:辽宁美术馆,城市规划馆,万豪酒店,k11,广电博物馆,文化路万达,盛京龙城,盛京大家庭,大悦城乐高,全运路万达,在跑章的过程中,临时加入了大悦城霸王别姬
计划
通过整理这些地方的地点和营业时间,初步按照下面的顺序依次跑章
辽宁美术馆
营业时间:9:00~17:00,16:00后不让进
路线:2号线 “市图书馆”,B口
盖章数:5枚
城市规划馆
时间:9:00~17:00,16:00后不让进
路线:2号线”沈阳市图书馆站“,C口(辽宁美术馆步行过来700米)
盖章数:7枚
注意事项:需要带身份证
沈阳皇朝万豪酒店
时间:2024.1.19~1.28,10:00~18:00
路线:2号线,五里河站,B1口(辽宁美术馆步行900米,城市规划馆步行900米)
盖章数:17枚
注意事项:分布在1楼和3楼的各个摊位,需要挨个问
k11
路线:2号线,五里河,B1口(万豪酒店步行800米)
盖章数:共6枚,中信书店(2枚,3楼),歌德书店(2枚,2楼),西西弗书店(2 ...
162. 寻找峰值(2023-12-18)
力扣每日一题
题目:162. 寻找峰值
日期:2023-12-18
用时:10 m 9 s
时间:0 ms
内存:40.54 MB
代码:
class Solution {
public int findPeakElement(int[] nums) {
if(nums.length==1){
return 0;
}
if(nums.length==2){
return nums[0]>nums[1]?0:1;
}
if(nums[0]>nums[1]){
return 0;
}
if(nums[nums.length-1]>nums[nums.length-2]){
return nums.length-1;
...
2415. 反转二叉树的奇数层(2023-12-15)
力扣每日一题
题目:2415. 反转二叉树的奇数层
日期:2023-12-15
用时:6 m 51 s
时间:0 ms
内存:46.97 MB
代码:
/**
* 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, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*& ...
2132. 用邮票贴满网格图(2023-12-14)
力扣每日一题
题目:2132. 用邮票贴满网格图
日期:2023-12-14
用时:38 m 32 s
思路:使用前缀和+差分,只是往常是一维,现在变二维了,原理差不多
时间:22ms
内存:98.24MB
代码:
class Solution {
public boolean possibleToStamp(int[][] grid, int stampHeight, int stampWidth) {
int xl = grid.length;
int yl = grid[0].length;
// 前缀和
int[][] sum = new int[xl+1][yl+1];
for(int i=1;i<=xl;i++){
for(int j=1;j<=yl;j++){
sum[i][j] ...
2697. 字典序最小回文串(2023-12-13)
力扣每日一题
题目:2697. 字典序最小回文串
日期:2023-12-13
用时:4 m 53 s
时间:7ms
内存:43.61MB
代码:
class Solution {
public String makeSmallestPalindrome(String s) {
char[] chs = s.toCharArray();
int size = s.length();
for(int i=0;i<size/2;i++){
if(chs[i]>chs[size-1-i]){
chs[i] = chs[size-1-i];
}else{
chs[size-1-i] = chs[i];
}
}
return ...
2454. 下一个更大元素 IV(2023-12-12)
力扣每日一题
题目:2454. 下一个更大元素 IV
日期:2023-12-12
用时:35 m 09 s
时间:614ms
内存:57.18MB
代码:
class Solution {
public int[] secondGreaterElement(int[] nums) {
int[] res = new int[nums.length];
Arrays.fill(res, -1);
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
while (!list2.isEmpty() && nums[list2.get(list2.size ...
沈阳四家万达(2023-12-09、2023-12-10)
全运路万达8枚
铁西万达4枚
北一路万达16枚
太原街万达8枚
(摘自小红书https://www.xiaohongshu.com/explore/65758b310000000006020803?m_source=mengfanwetab)
2008. 出租车的最大盈利(2023-12-08)
力扣每日一题
题目:2008. 出租车的最大盈利
简短说明
今天的解题有点曲折,完全是一步一步优化来的,看上面的截图,最开始的超时,超时后我加了记忆化搜索,虽然通过了,但是执行时间不太理想,接下来我稍微优化了下,但是执行时间基本没动过,接下来,又尝试着去掉递归,这次效果很显著,执行时间直接从2000多毫秒降低到了18毫秒
过程
下面我分别把这四次的代码都展示出来,记录下每次的优化,代码展示顺序是按照上面的截图从下往上的
超出时间限制
class Solution {
public long maxTaxiEarnings(int n, int[][] rides) {
List<int[]>[] prices = new ArrayList[n+1];
for(int[] ride:rides){
if(prices[ride[1]]==null){
prices[ride[1]] = new ArrayList<> ...
1466. 重新规划路线(2023-12-07)
力扣每日一题
题目:1466. 重新规划路线
日期:2023-12-07
用时:45 m 36 s
时间:37ms
内存:69.64MB
代码:
class Solution {
public int minReorder(int n, int[][] connections) {
list = new List[n];
Arrays.setAll(list, k -> new ArrayList<>());
for (int[] connection : connections) {
int start = connection[0];
int end = connection[1];
list[start].add(new int[] {end, 1});
list[end].add(new int[] {start, 0& ...
2646. 最小化旅行的价格总和(2023-12-06)
力扣每日一题
题目:2646. 最小化旅行的价格总和
日期:2023-12-06
用时:30 m 14 s
时间:8ms
内存:42.98MB
思路:先统计旅行中每个节点路过的次数(dfs方法),再计算减半后的价格之和的最小值(dp方法),最后比较下减半和未减半的价格。dp方法中,对于相邻的父子节点有两种情况:
如果父节点价格不变,那么子节点的价格取减半和不变两种情况的最小值
如果父节点价格减半,那么子节点的价格只能不变
代码:每条路上通过的城市数量实际就是图中每个节点的子节点数量。
class Solution {
public int minimumTotalPrice(int n, int[][] edges, int[] price, int[][] trips) {
list = new ArrayList[n];
for(int i=0;i<n;i++){
list[i] = new ArrayList<>();
}
...
2477. 到达首都的最少油耗(2023-12-05)
力扣每日一题
题目:2477. 到达首都的最少油耗
日期:2023-12-05
用时:34 m 15 s
时间:37ms
内存:84.8MB
思路:分别计算每条路上通过的城市数量(数量/座位数,向上取整),然后求和,这里每条路上通过的城市数量实际就是图中每个节点的子节点数量。
代码:每条路上通过的城市数量实际就是图中每个节点的子节点数量。
class Solution {
public long minimumFuelCost(int[][] roads, int seats) {
int size = roads.length+1;
List<Integer>[] list = new ArrayList[size];
for(int i=0;i<size;i++){
list[i] = new ArrayList<>();
}
for(int[] road:ro ...
1038. 从二叉搜索树到更大和树(2023-12-04)
力扣每日一题
题目:1038. 从二叉搜索树到更大和树
日期:2023-12-04
用时:12 m 23 s
时间:0ms
内存:39.39MB
代码:
/**
* 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, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
* ...