Updated files: .sync.cmd src/main/java/cn/whaifree/MonotoneStack/LeetCode739.java src/main/java/cn/whaifree/leetCode/LeetCode/LeetCode42.java
This commit is contained in:
parent
30cc40a5ab
commit
040afd5488
31
.sync.cmd
31
.sync.cmd
@ -1,5 +1,30 @@
|
|||||||
git add .
|
|
||||||
git commit -m "Sync"
|
|
||||||
git push origin master
|
|
||||||
|
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
git add .
|
||||||
|
|
||||||
|
:: 获取暂存区中的更改文件列表
|
||||||
|
for /f "delims=" %%a in ('git diff --cached --name-only') do (
|
||||||
|
set "changed_files=!changed_files! %%a"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 如果没有文件更改,则设置一个默认的提交信息
|
||||||
|
if "%changed_files%"=="" (
|
||||||
|
set "commit_message=No files changed"
|
||||||
|
) else (
|
||||||
|
:: 设置提交信息,包括修改的文件列表
|
||||||
|
set "commit_message=Updated files: %changed_files%"
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 执行git commit
|
||||||
|
git commit -m "%commit_message%"
|
||||||
|
echo "git push origin master"
|
||||||
|
git push origin master
|
||||||
|
echo "git push gitee master"
|
||||||
git push gitee master
|
git push gitee master
|
||||||
|
echo "git push github master"
|
||||||
|
git push github master
|
||||||
|
|
||||||
|
endlocal
|
||||||
|
59
src/main/java/cn/whaifree/MonotoneStack/LeetCode739.java
Normal file
59
src/main/java/cn/whaifree/MonotoneStack/LeetCode739.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package cn.whaifree.MonotoneStack;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/8 11:48
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode739 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
int[] temperatures = {73,74,75,71,69,72,76,73};
|
||||||
|
Solution solution = new Solution();
|
||||||
|
int[] res = solution.dailyTemperatures(temperatures);
|
||||||
|
System.out.println(Arrays.toString(res));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* 单调栈
|
||||||
|
*
|
||||||
|
* 不断把i放入栈
|
||||||
|
* if nums[i] > stack.peek
|
||||||
|
* pop = stack.pop
|
||||||
|
* res[] = i - pop
|
||||||
|
* else
|
||||||
|
* stack.push(i)
|
||||||
|
*
|
||||||
|
* @param temperatures
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int[] dailyTemperatures(int[] temperatures) {
|
||||||
|
int[] res = new int[temperatures.length];
|
||||||
|
Deque<Integer> stack = new LinkedList<>();
|
||||||
|
stack.push(0);
|
||||||
|
for (int i = 1; i < temperatures.length ; i++) {
|
||||||
|
if (temperatures[i] > temperatures[stack.peek()]) {
|
||||||
|
// 如果当前比遍历元素比 栈顶的大,证明该元素就是栈顶元素右边第一个大于他的值
|
||||||
|
// 并且需要判断一下,当前元素是不是 新栈顶 的下一个大于他的
|
||||||
|
while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
|
||||||
|
res[stack.peek()] = i - stack.peek();
|
||||||
|
stack.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
106
src/main/java/cn/whaifree/leetCode/LeetCode/LeetCode42.java
Normal file
106
src/main/java/cn/whaifree/leetCode/LeetCode/LeetCode42.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
package cn.whaifree.leetCode.LeetCode;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version 1.0
|
||||||
|
* @Author whai文海
|
||||||
|
* @Date 2024/4/8 11:23
|
||||||
|
* @注释
|
||||||
|
*/
|
||||||
|
public class LeetCode42 {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test()
|
||||||
|
{
|
||||||
|
|
||||||
|
int[] height = new int[]{0,1,0,2,1,0,1,3,2,1,2,1};
|
||||||
|
int trap = new Solution2().trap(height);
|
||||||
|
System.out.println(trap);
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* 从左到右 获得每个位置的左边最高
|
||||||
|
* 从右到左 获得每个位置的右边最高
|
||||||
|
*
|
||||||
|
* 取交集
|
||||||
|
*
|
||||||
|
* @param height
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int trap(int[] height) {
|
||||||
|
int[] leftHeight = new int[height.length];
|
||||||
|
int leftH = 0;
|
||||||
|
for (int i = 0; i < height.length; i++) {
|
||||||
|
leftH = Math.max(leftH, height[i]);
|
||||||
|
leftHeight[i] = leftH;
|
||||||
|
}
|
||||||
|
int[] rightHeight = new int[height.length];
|
||||||
|
int rightH = 0;
|
||||||
|
for (int i = height.length - 1; i >= 0; i--) {
|
||||||
|
rightH = Math.max(rightH, height[i]);
|
||||||
|
rightHeight[i] = rightH;
|
||||||
|
}
|
||||||
|
|
||||||
|
int res = 0;
|
||||||
|
for (int i = 0; i < height.length; i++) {
|
||||||
|
res += Math.min(rightHeight[i], leftHeight[i]) - height[i];
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Solution2{
|
||||||
|
/**
|
||||||
|
* 关键在于
|
||||||
|
* - i值 < 栈顶值 入栈
|
||||||
|
* 【3 2 1】 递减,下一个遇到5时,先计算left=2 mid=1 right=5 的容积,再while left=3 mid=1 right=5的容积
|
||||||
|
* - i值 > 栈顶值 需要计算i为槽时的容积
|
||||||
|
* - i值 == 栈顶值 更新
|
||||||
|
* @param height
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int trap(int[] height) {
|
||||||
|
// 单调栈 找到右边第一个高于他的墙
|
||||||
|
// 保证栈内元素,从上到下为递增的,这样就能获取到槽的两边,并且确保不会有一边为空的
|
||||||
|
Deque<Integer> stack = new LinkedList<>();
|
||||||
|
stack.push(0);
|
||||||
|
int res = 0;
|
||||||
|
for (int i = 1; i < height.length; i++) {
|
||||||
|
if (height[i] > height[stack.peek()]) {
|
||||||
|
// 遇到凹陷
|
||||||
|
//pop up all lower value
|
||||||
|
int heightAtIdx = height[i]; // 右边墙的高度
|
||||||
|
// 不断判断左边的墙,因为如果左边的墙存在,必然大于上一个左墙 如height 3 2 1 5
|
||||||
|
while (!stack.isEmpty() && (heightAtIdx > height[stack.peek()])){
|
||||||
|
int mid = stack.pop(); // 中间槽的下标
|
||||||
|
|
||||||
|
if (!stack.isEmpty()){
|
||||||
|
int left = stack.peek(); // 左边墙的下标
|
||||||
|
|
||||||
|
int h = Math.min(height[left], height[i]) - height[mid];
|
||||||
|
int w = i - left - 1;
|
||||||
|
int hold = h * w;
|
||||||
|
|
||||||
|
if (hold > 0) res += hold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stack.push(i);
|
||||||
|
|
||||||
|
|
||||||
|
} else if (height[i] == height[stack.peek()]) {
|
||||||
|
stack.pop();
|
||||||
|
stack.push(i);
|
||||||
|
}else {
|
||||||
|
stack.push(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user