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的更多相关文章

  1. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  2. 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

    /** * 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标. * * 你可以假设每种输入只会对应一个答案.但是,数组中 ...

  3. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  4. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  5. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  6. 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。

    // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...

  7. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    class Solution {     public int[] twoSum(int[] nums, int target) {         for (int i = 0; i < nu ...

  8. 基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[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 ...

  9. 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9

    python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...

  10. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

随机推荐

  1. R 字符串操作超全总结

    paste函数和paste0()函数 连接字符 > paste("a", 1:3) #默认空格符连接,即sep=" " [1] "a 1&quo ...

  2. Codeforces Round 857 (Div. 2) A-D

    Codeforces Round 857 (Div. 2) A. Likes 求每回合最大的数列:先全使用正数,每个正数对ans++,再全使用负数,每个负数对ans-- 求每回合最小的数列:方法1(模 ...

  3. 2-2 理解const

    1 const 在引用中注意不能为常量绑定一个非常量的引用 在指针中区分low-level const和top-level const const通常用于定义常量,一经定义不许修改,且使用const必 ...

  4. Android日常--今日的APP进度+1

    学了这么久的APP,是时候拿出来实践一下啦! 今天洗的内容都比较基础,基本上不涉及到后台代码的编写,看到本阶段的目标需要连接数据库,也是有被震住哈哈哈哈哈: 我发现,第一阶段主要分为两个界面,第一个注 ...

  5. Matlab笔记--Matlab基础

    Matlab基础 数据类型(共有15种数据类型) 整数 取整函数 浮点数(单精度浮点数和双精度浮点数--默认为双精度浮点数) 复数 数据的显示格式(format确定数据的显示格式): 数据格式经过改变 ...

  6. PyQt-Fluent-Widgets:一个 Fluent Design 风格的组件库

    简介 这是一个使用 PyQt/PySide 编写的 Fluent Design 风格的组件库,包含最常用的组件,支持亮暗主题无缝切换.实际上此项目是从 Groove Music 项目剥离出来的子项目, ...

  7. maui BlazorWebView+本地html (vue、uniapp等都可以) 接入微信sdk 开发 Android app

    首先添加微信sdk的绑定库 nuget 包:Chi.MauiBinding.Android.WeChat 项目地址:https://github.com/realZhangChi/MauiBindin ...

  8. 剑指 offer 第 4 天

    第 4 天 查找算法(简单) 剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但 ...

  9. 记一次在forEach中使用aynac/await中的坑

    1.背景 在写一个对齐脚本时 发现下列问题 const timeList = await imageList.map( (item,index)=>{ return item.identify_ ...

  10. 西瓜播放器api的坑 直播设置自动播放

    我们先看一下官方DEMO let player = new HlsPlayer({ id: 'mse', url: '//sf1-cdn-tos.huoshanstatic.com/obj/media ...