2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度,如果不存在,返回 0
2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j],
这样的坡的宽度为 j - i。
找出 A 中的坡的最大宽度,如果不存在,返回 0。
示例 1:
输入:[6,0,8,2,1,5]
输出:4
解释:
最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5。
示例 2:
输入:[9,8,1,0,1,9,4,0,4,1]
输出:7
解释:
最大宽度的坡为 (i, j) = (2, 9): A[2] = 1 且 A[9] = 1。
答案2023-03-13:
单调栈,严格来说说递减栈。然后从右往左遍历。
时间复杂度:O(N)。
空间复杂度:O(N)。
这代码用山寨版chatgpt写,不用改代码。
代码用rust编写。代码如下:
fn max_width_ramp(arr: &[i32]) -> usize {
let n = arr.len();
// 栈中只放下标
let mut stack = vec![0; n];
// 栈的大小
let mut r = 0;
for i in 0..n {
if r == 0 || arr[stack[r - 1]] > arr[i] {
stack[r] = i;
r += 1;
}
}
let mut ans = 0;
// 从右往左遍历
// j = n - 1
for j in (0..n).rev() {
while r != 0 && arr[stack[r - 1]] <= arr[j] {
let i = stack[r - 1];
r -= 1;
ans = ans.max(j - i);
}
}
ans
}
fn main() {
let arr = [6, 0, 8, 2, 1, 5];
let ans = max_width_ramp(&arr);
println!("{}", ans);
let arr = [9, 8, 1, 0, 1, 9, 4, 0, 4, 1];
let ans = max_width_ramp(&arr);
println!("{}", ans);
}

代码用golang编写。代码如下:
package main
import "fmt"
func maxWidthRamp(arr []int) int {
n := len(arr)
// 栈中只放下标
stack := make([]int, n)
// 栈的大小
r := 0
for i := 0; i < n; i++ {
if r == 0 || arr[stack[r-1]] > arr[i] {
stack[r] = i
r++
}
}
ans := 0
// 从右往左遍历
// j = n - 1
for j := n - 1; j >= 0; j-- {
for r != 0 && arr[stack[r-1]] <= arr[j] {
i := stack[r-1]
r--
ans = max(ans, j-i)
}
}
return ans
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
func main() {
if true {
arr := []int{6, 0, 8, 2, 1, 5}
ans := maxWidthRamp(arr)
fmt.Println(ans)
}
if true {
arr := []int{9, 8, 1, 0, 1, 9, 4, 0, 4, 1}
ans := maxWidthRamp(arr)
fmt.Println(ans)
}
}

2023-03-13:给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j], 这样的坡的宽度为 j - i。 找出 A 中的坡的最大宽度,如果不存在,返回 0的更多相关文章
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
/** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...
- LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...
- 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表
这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
class Solution { public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nu ...
- 基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2] 输入: 请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 输出 在不删除原有文件内容
1丶 实验代码 #include<stdio.h> int main(void) { int tt,nn,i,j,c[11][11]; int flag=1; scanf("%d ...
- 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9
python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...
- c语言经典算法——查找一个整数数组中第二大数
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...
随机推荐
- SQL中获取多条记录拼接成字符串
declare @aa nvarchar(200) set @aa=(select STUFF((select ','+LTRIM(list.TempName1) from (select TempN ...
- Spring全家桶
常用框架的知识点汇总,如图: 一.5个常用的spring框架 ▌1.spring framework 也就是我们经常说的spring框架,包括了ioc依赖注入,Context上下文.bean管理.sp ...
- final修饰的作用
在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量) 1.final修饰类 当用final修饰一个类时,表明这个类不能被继承. final类中的成员变量可以根据需要设为f ...
- vRealize Operations Manager 安全补丁修复
vRealize Operations Manager 安全补丁修复 背景:记录一次安全同事在检测中发现 vRealize Operations Manager 存在安全漏洞,需要整改修复,于是到VM ...
- Java里的对象是咋回事
前言 在上一篇文章中,壹哥给大家介绍了Java中的类及其特点.创建过程等内容,相信你现在已经知道该如何创建一个Java类了.接下来在本篇文章中,壹哥会继续带大家学习面向对象中关于对象的内容.其实类和对 ...
- GUI编程--1
GUI编程--1 GUI是什么 (Graphical User Interface),即用户图形界面编程. 怎么玩 平时怎么运用 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 1.简介 ...
- EX6新增的字符串
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Redis集群介绍及测试思路
作者:京东零售 李磊 Redis集群介绍 Redis集群一般有四种方式,分别为:主从复制.哨兵模式.Cluster以及各大厂的集群方案.在3.0版本之前只支持单实例模式,3.0之后支持了集群方式.在3 ...
- [GIT] 如何处理GIT分支合并(GIT MERGE)
1 概述 2 分支合并 如果你有两个分支main和dev,main存放稳定版本,dev是开发版本,一个阶段后,你需要把dev代码更新到main分支中. dev --(merge update cont ...
- [Java SE]Java方法的参数传递机制:值传递
1 案例引入:实验源码 [案例结论] 若调用方client想通过修改方法updateMethod(oldObject)对调用方所在的引用对象(非基本数据类型)oldObject的属性值进行修改,则: ...