LeetCode962. 最大宽度坡
问题:最大宽度坡
给定一个整数数组 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.
提示:
2 <= A.length <= 500000 <= A[i] <= 50000
链接:https://leetcode-cn.com/contest/weekly-contest-116/problems/maximum-width-ramp/
分析:
问题不难,早早的就有了思路 ,可惜一直卡在50000数组超时上 ,好在不断优化(或者Server突然性能给力?)最后十来分钟AC了。
想要找到最大的j-i,满足i<j且A[i]<=A[j]。
基本思路就是二重循环,但是要做一些优化。
1.如果找到了一组符合要求的n1,n2,那么对于后续的m1>n1,其下限m2必须大于n2,才有可能m2-m1>n2-n1(m1>n1) [通过数轴会更直观一些]
2.如果已经有了符合要求的n1,n2,那么对于n11>n1,如果A[n11]>=A[n1],则没必要看,其结果必定小于n1, 比如下标i1,i2,i3依次递增,如果A[i1]<=A[i2],A[i2]<=A[i3],那么A[i1]<=A[i3],i3-i1>i3-i2
3.在第二层循环的时候, 不但对下限有要求,而且m2-m1要大于已知的最大宽度。
AC Code:
class Solution {
public:
int maxWidthRamp(vector<int>& A) {
int ret = ;
int rightlimit = ;
int predata = -;
for (unsigned int i = ; i < A.size(); i++)
{
if (predata == -)
{
predata = A[i];
}
else
{
if (predata > A[i])
{
predata = A[i];
}
else
{
continue;
}
}
if (A.size() - - i < ret)
{
return ret;
}
for (unsigned int j = A.size()-; j > rightlimit && j-i>ret; j--)
{
steps++;
if (A[j] >= A[i])
{
if (j - i > ret)
{
ret = j - i;
}
rightlimit = j;
break;
}
}
}
return ret;
}
};
虽然AC了,完赛后查看通过时间,98个测例,用时1880ms,还有很大的优化空间。
其他:
1.第一code:
class Solution:
def maxWidthRamp(self, A):
"""
:type A: List[int]
:rtype: int
"""
l = []
for i in range(len(A)):
l.append((A[i], i))
l.sort()
res = 0
small = l[0][1]
for _,e in l:
if e < small:
small = e
else:
if e - small > res:
res = e - small
return res
刚注意到国内和国外排行榜是分离的,国际版第一code:
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std; typedef long long LL;
typedef vector<int> VI; #define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define EACH(i,c) for(__typeof((c).begin()) i=(c).begin(),i##_end=(c).end();i!=i##_end;++i)
#define eprintf(...) fprintf(stderr, __VA_ARGS__) template<class T> inline void amin(T &x, const T &y) { if (y<x) x=y; }
template<class T> inline void amax(T &x, const T &y) { if (x<y) x=y; }
template<class Iter> void rprintf(const char *fmt, Iter begin, Iter end) {
for (bool sp=; begin!=end; ++begin) { if (sp) putchar(' '); else sp = true; printf(fmt, *begin); }
putchar('\n');
}
class Solution {
public:
int maxWidthRamp(vector<int>& A) {
vector<pair<int, int> > t;
REP (i, A.size()) t.emplace_back(A[i], i);
sort(t.begin(), t.end());
int ans = ;
int left = t[].second;
for (int i=; i<(int)t.size(); i++) {
amax(ans, t[i].second - left);
amin(left, t[i].second);
} return ans;
}
};
LeetCode962. 最大宽度坡的更多相关文章
- [Swift]LeetCode962. 最大宽度坡 | Maximum Width Ramp
Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j]. The ...
- Leetcode962. Maximum Width最大宽度坡 Ramp
给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j].这样的坡的宽度为 j - i. 找出 A 中的坡的最大宽度,如果不存在,返回 0 . 示例 ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- LeetCode刷题总结-数组篇(番外)
本期共7道题,三道简单题,四道中等题. 此部分题目是作者认为有价值去做的一些题,但是其考察的知识点不在前三篇总结系列里面. 例1解法:采用数组索引位置排序的思想. 例2解法:考察了组合数学的组合公式应 ...
- 49.UILable宽度高度自适应
第一种: UILabel *labl = [[UILabel alloc]init]; labl.backgroundColor = [UIColor redColor]; labl.numberOf ...
- HTML 获取屏幕、浏览器、页面的高度宽度
本篇主要介绍Web环境中屏幕.浏览器及页面的高度.宽度信息. 目录 1. 介绍:介绍页面的容器(屏幕.浏览器及页面).物理尺寸与分辨率.展示等内容. 2. 屏幕信息:介绍屏幕尺寸信息:如:屏幕.软件可 ...
- Jquery对网页高度、宽度的操作
Jquery获取网页的宽度.高度 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: doc ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- android手机旋转屏幕时让GridView的列数与列宽度自适应
无意中打开了一年前做过的一个android应用的代码,看到里面实现的一个小功能点(如题),现写篇文章做个笔记.当时面临的问题是,在旋转屏幕的时候需要让gridview的列数与宽度能自适应屏幕宽度,每个 ...
随机推荐
- 查看SQL Server中的锁表及解锁
有时候系统很慢,有可能是SQL Server数据库中某些表被锁定 --查看被锁表(需查多几次,有些临时锁很快会自动解锁): SELECT request_session_id AS spid, OBJ ...
- c# 读取图片文件
/// <summary> /// 通过FileStream 来打开文件,这样就可以实现不锁定Image文件,到时可以让多用户同时访问Image文件 /// </summary> ...
- DotNetty 跨平台的网络通信库(转)
久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点,并 ...
- 微信小程序实战篇:基于wxcharts.js绘制移动报表
前言 微信小程序图表插件(wx-charts)是基于canvas绘制,体积小巧,支持图表类型饼图.线图.柱状图 .区域图等图表图形绘制,目前wx-charts是微信小程序图表插件中比较强大好使的一个. ...
- echarts渲染一个风向图
今天给大家说一个用echarts渲染一个风向图,这里图上其实有三个要素,风向,风级和能见度,主要还是讲讲代码里面的坑 1.风向图标方向修改以及设置 var ownData = echarts.util ...
- iOS - 通过view查找所在(viewController)
- (UIViewController *)findViewController:(UIView *)sourceView { id target=sourceView; while (target) ...
- COGS 182. [USACO Jan07] 均衡队形
★★ 输入文件:lineup.in 输出文件:lineup.out 简单对比时间限制:4 s 内存限制:128 MB 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛 ...
- SAP CRM和C4C的产品主数据price维护
SAP CRM 点了Edit List之后,可以直接修改产品主数据的Price信息: C4C 在C4C的product administration工作中心里: 点击Edit按钮进入编辑模式,Pric ...
- naive bayes classifier in data mining
https://www-users.cs.umn.edu/~kumar001/dmbook/slides/chap4_naive_bayes.pdf -- textbook https://www. ...
- 2019.03.16 ZJOI2019模拟赛 解题报告
得分: \(100+27+20=147\)(\(T1\)巨水,\(T2,T3\)只能写暴力分) \(T1\):深邃 比较套路的一眼题,显然是一个二分+贪心,感觉就是\(NOIP2018Day1T3\) ...