关键词:
题目描述
给定一个数组序列,需要选出一个区间,使得该区间是所有区间中经过如下计算的值最大的一个。
区间中的最小数 * 区间所有数的和
最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列[6,2,1]可得到左右可以选定各个区间的计算值:
[6]=6*6=36
[2]=2*2=4;
[1]=1*1=1;
[6,2]=2*8=16;
[2,1]=1*3=3;
[6,2,1]=1*9=9
则程序输出36
区间所有数字都在【0,100】的范围内。
解题思路:
可以看出我们需要维护一个区间,同时我们能知道区间的最小值,和这个区间所有数字的和。
但是,有一点我们可以清楚知道,如果一个区间的最小值已经确定,那么我们就要尽量使得区间的和最大。其实本问题就可以转换到遍历数组,以当前位置为最小值,向左向右>=当前值能扩展的最大距离问题,我们知道这样的方法时间复杂度是O(n^2)。
嗯 区间的最小值和区间边界我们可以用单调栈去维护,这样时间复杂度就降到O(n)
其实大小都有了,输出区间边界也就不难了。我这里 输出了最大值和 区间的开始结束位置。如果有多个区间=max,我输出的是字典序较小的区间,代码如下:
给几个比较有用的数据
1
0
ans:
0
1 1
---------------------
9
1 1 1 1 1 1 1 2 2
ans:
11
1 9
----------------
4
1 3 2 4
ans:
18
2 4
----------------
#include <iostream> #include <stdio.h> #include <vector> using namespace std; typedef long long ll; ll a[100010]; class node { public: ll left, right,x; }; ll sum[100010]; int main() { // 维护一个递增的栈 int n; vector<node> st; while (cin>>n) { ll ans = -1; if (n == 0) { cout << 0 << endl << 0 << " " << 0 << endl;continue; } ll l = 0, r = 0; while (!st.empty()) st.pop_back(); sum[0] = 0; for (int i = 1; i <= n; ++i) { scanf("%lld",&a[i]); sum[i] = sum[i-1] + a[i]; } for (int i = 1; i <= n; ++i) { if (st.empty()) { st.push_back({i,i,a[i]}); } else { node u = st.back(); if (a[i] > u.x) { st.push_back({i,i,a[i]}); } else { int ileft=0,iright=0; while (!st.empty()) { node v = st.back(); if (v.x >= a[i]) { st.pop_back(); ileft = v.left; if(st.size()) st.back().right = v.right; ll tmp = (sum[v.right] - sum[v.left-1])*v.x; if (tmp >= ans) { ans = tmp; l = v.left; r = v.right; } } else break; } st.push_back({ileft,i,a[i]}); } } } while (!st.empty()) { node v = st.back(); st.pop_back(); if(st.size()) st.back().right = v.right; ll tmp = (sum[v.right] - sum[v.left-1])*v.x; if (tmp >= ans){ ans = tmp; l = v.left; r = v.right; } } cout << ans << endl << l << " " << r << endl; } return 0; }
今日头条2018aicamp5月26日在线笔试编程题第一道——最佳路径(代码片段)
题目给定一个n*m的矩阵A,矩阵中每一个元素为一个十六进制数。寻找一条从左上角都右下角的路径,每次只能向右或者向下移动, 使得路径上所有数字之积在16进制下的后缀0最少。输入描述:第一行:n,m(2<=n,m<=1000) ... 查看详情
笔试今日头条-线段树查询
【题目描述】给定两个长度为 n 的整数数列 A 和 B。再给定 q 组查询,每次查询给出两个整数 x 和 y,求满足 Ai>=x 且 Bi>=y 这样的 i 的数量。输入格式第一行给定两... 查看详情
实习生求职今日头条笔试
时间:大三下学期职位:测试开发过程: 首先,会有练习题,但是练习题没有针对性,而且编程题会很简单;主要是用来检查自己的环境是否合适、熟悉系统。 然后就是正式考试了——开始会很卡(反... 查看详情
8.22今日头条笔试
这次套路深啊,怎么还有改错题!。上来看题,每个题目的输入数据都很大,果断上scanf,printf,千万不能用cin,cout1.右上角的点,我的思路是先对每一行去重(题目好像说没有重的点耶!),每一行只有最右边的点才是候选点,然... 查看详情
今日头条2018校招后端方向(第二批)第一题二分查找(代码片段)
原题链接 https://www.nowcoder.com/test/8537209/summary题意n个数 q个查询 L,R,K L到R区间内为K的数有多少个数据范围 n<=300000,q<=300000 解析 对于每次查询必须要O(logn)复杂度才行 所以想到二分查找 因为数... 查看详情
字节跳动(今日头条)的题目真的难吗?
大家好鸭,我是好好学习天天编程的天天,一个每天都努力精进,并努力分享的主儿。今天给聊得话题是关于字节跳动笔试题难度的。在各种交流群了,总是能看到大家在说字节跳动的题目好难呀,4个编程题没有一个题AC。天天... 查看详情
头条笔试题2018后端第二批(代码片段)
...签(空格分隔):笔试题描述:为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一... 查看详情
美团笔试-第二题最大汉明距离:
题目描述 给出n个数,求这n个数中两两最大的汉明距离,两个数的汉明距离定义维两个二进制表示中不同的位数。 例如11和6的汉明距离为3,因为11转换为二进制后为1011,6转换为二进制后为0110,他们的二进制第1,3,4位... 查看详情
2018今日头条(代码片段)
P为给定的二维平面整数点集。定义P中某点x,如果x满足P中任意点都不在x的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复,坐标轴范围在[0,1e9)内)... 查看详情
今日头条笔试题--2018优先队列(代码片段)
时间限制:1秒空间限制:81920K产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个idea,每个idea有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的... 查看详情
字节跳动(今日头条)的题目真的难吗?
大家好鸭,我是好好学习天天编程的天天,一个每天都努力精进,并努力分享的主儿。今天给聊得话题是关于字节跳动笔试题难度的。在各种交流群了,总是能看到大家在说字节跳动的题目好难呀,4个编程题没有一个题AC。天天... 查看详情
今日头条”杯2018年湖北省赛网)(代码片段)
所有题目: http://cdn.vo-ov.cn/online_f9ec217.pdf F:A-maze-ing哇我也是哭了...dfs写错,dfs还用了vis数组,实际上并不需要,WA了N多次...呜呜呜看出来对图的基本概念还比较生疏,或者说都忘了好多,一开始还在纠结环是不是强连通... 查看详情
美团笔试-第二题最大汉明距离:
题目描述 给出n个数,求这n个数中两两最大的汉明距离,两个数的汉明距离定义维两个二进制表示中不同的位数。 例如11和6的汉明距离为3,因为11转换为二进制后为1011,6转换为二进制后为0110,他们的二进制第1,3,4位... 查看详情
2018今日头条春招的一道笔试题——通过改变枚举的变量进行枚举优化(代码片段)
题目如下: 这道题我们最先想到的做法,应该就是2重循环枚举数对,然后把数对放在set里去重,最后输出set的大小,即输出set.size()。代码如下:1#include<iostream>2#include<set>3usingnamespacestd;45intn,k,a[100000];6s... 查看详情
怎么在今日头条上发布新闻,或者做广告投放的?
怎么在今日头条上发布新闻,或者做广告投放的?就是把信息,主动推送给用户的那种广告,或者新闻。广告投放自己不好做,要说自己在上边发新闻或许还可以今日头条如何发布文章?第一步,登陆今日头条官网申请账号第二... 查看详情
今日头条和今日头条极速版有什么区别
3C数码您的浏览器不支持HTML5视频zymedia(\'video\')参考技术A今日头条和今日头条极速版区别为:安装包大小不同、占用运行内存不同、特色功能不同。一、安装包大小不同1、今日头条普通版:今日头条普通版的安装包大小为22.8M。2... 查看详情
从互联网大脑模型看腾讯与今日头条之争
2018年以来,今日头条与百度,腾讯产生激烈的竞争,6月20日,百度一名前员工因涉嫌违反竞业协议加入今日头条,被百度诉至劳动仲裁部门,而之前一个月,在5月份,今日头条以侵害作品信息网络... 查看详情
洛谷2018寒假集训tg第二次比赛第二题princessprincipal题解
这算不算泄题啊。。。被kkk发现会咕咕咕吧。题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r。问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Chtholly样例:input:557232343344551524outp... 查看详情