中山市住房建设局网站,网站建设需要材料,怎样制作属于自己的网站,介绍网站建设规划书结构题目
题目链接#xff1a; https://www.nowcoder.com/practice/1f54e163e6944cc7b8759cc09e9c78d8
思路 单调栈最直接的应用就是获取数组中每个位置i,i的左边第一个比i大或者小的位置/数以及,i的右边第一个比i大或者小的位置/数不懂的同学看这里https://blog.csdn.net/Borsl…题目
题目链接 https://www.nowcoder.com/practice/1f54e163e6944cc7b8759cc09e9c78d8
思路 单调栈最直接的应用就是获取数组中每个位置i,i的左边第一个比i大或者小的位置/数以及,i的右边第一个比i大或者小的位置/数不懂的同学看这里https://blog.csdn.net/Borslav/article/details/125469491参考答案Java
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可** 每日温度* param dailyTemperatures int整型一维数组* return int整型一维数组*/public int[] temperatures (int[] dailyTemperatures) {//单调栈递减栈// 也就是先求每个元素i左边右边离他最近的第一个大于i的数,没有大于i的用-1表示int n dailyTemperatures.length;int[][] bigarr new int[n][2];//单调递减栈StackListInteger stack new Stack();for (int i 0; i n ; i) {while (!stack.isEmpty() dailyTemperatures[stack.peek().get(0)] dailyTemperatures[i]) {ListInteger pops stack.pop();int leftBigger stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer pop : pops) {bigarr[pop][0] leftBigger; //pop左边边第一个比pop大的位置bigarr[pop][1] i; //pop右边第一个比pop大的位置}}if (!stack.isEmpty() dailyTemperatures[stack.peek().get(0)] dailyTemperatures[i]) {stack.peek().add(i);} else {ListInteger ll new ArrayList();ll.add(i);stack.push(ll);}}while (!stack.isEmpty()) {ListInteger pops stack.pop();int leftBigger stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer pop : pops) {bigarr[pop][0] leftBigger;bigarr[pop][1] -1;}}//前面的代码是通用的单调栈的模板// 答案中我们只需要用到bigarr中每个元素的1下标即右边第一个比自己大的位置int[] ans new int[n];for (int i 0; i n ; i) {if (bigarr[i][1] -1) {ans[i] 0;} else {ans[i] bigarr[i][1] - i;}}return ans;}
}参考答案Go
package main/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可** 每日温度* param dailyTemperatures int整型一维数组* return int整型一维数组*/
func temperatures(dailyTemperatures []int) []int {//单调栈递减栈// 也就是先求每个元素i左边右边离他最近的第一个大于i的数,没有大于i的用-1表示n : len(dailyTemperatures)bigarr : make([][]int, n)//单调递减栈stack : [][]int{} //GO中栈用切片表示即可for i : 0; i n; i {stlen : len(stack)for len(stack) 0 dailyTemperatures[stack[stlen-1][len(stack[stlen-1])-1]] dailyTemperatures[i] {pops : stack[stlen-1]stack stack[:stlen-1]leftbig : 0if len(stack) 0 {leftbig -1} else {stlen len(stack)leftbig stack[stlen-1][len(stack[stlen-1])-1]}for _, v : range pops {bigarr[v] make([]int, 2)bigarr[v][0] leftbig //v左边第一个比v大的位置bigarr[v][1] i //v右边第一个比v大的位置}}stlen len(stack)if len(stack) 0 dailyTemperatures[stack[stlen-1][len(stack[stlen-1])-1]] dailyTemperatures[i] {stack[stlen-1] append(stack[stlen-1], i)} else {list : []int{}list append(list, i)stack append(stack, list)}}for len(stack) 0 {stlen : len(stack)pops : stack[stlen-1]stack stack[:stlen-1]leftbig : 0if len(stack) 0 {leftbig -1} else {stlen len(stack)leftbig stack[stlen-1][len(stack[stlen-1])-1]}for _, v : range pops {bigarr[v] make([]int, 2)bigarr[v][0] leftbigbigarr[v][1] -1}}//前面的代码是通用的单调栈的模板// 答案中我们只需要用到bigarr中每个元素的1下标即右边第一个比自己大的位置ans : make([]int, n)for i : 0; i n; i {if bigarr[i][1] -1 {ans[i] 0} else {ans[i] bigarr[i][1] - i}}return ans
}
参考答案PHP
在这里插入代码片