今日头条 - 区间最大值 - 代码参考

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	int n, dis = 1;
	vector<int> result;
	vector<int> a;
	cin >> n;
	for (int i = 0; i < n; i++){
		int temp;
		cin >> temp;
		a.push_back(temp);
	}
	for (int m = 0; m < n; m++){
		for (int i = 0; i < dis; i++){
			for (int j = i; j < n; j += dis){
				int min = a[j], sum = 0;
				if (n - j < dis)
					break;
				for (int k = j; k < j + dis; k++){
					if (a[k] < min)
						min = a[k];
					sum += a[k];
				}
				result.push_back(sum * min);				
			}
		}
		if (++dis > n - 1)
			break;
	}
	sort(result.begin(), result.end());		
	cout << result[result.size() - 1];	
	return 0;
}

#字节跳动#
全部评论
最外层循环m为切分次数:总共切分n次; 第二层循环,i为切分开始位置,dis为切分区间长度, 第三层循环,以i为起点,dis为步进距离,切分整个数组,if判断剩余元素数是否足够作为一个区间 第三层循环内部即对各个区间进行求和,以及寻找该区间最小值 result数组存储每个区间最小值与区间元素之和的乘积 最后,排序result数组,最大值即为结果
点赞 回复 分享
发布于 2017-08-23 12:14
欢迎来讨论,求大佬指导~
点赞 回复 分享
发布于 2017-08-23 12:06
我是用单调队列做的,对于第i个点,从左到右维护最小值可以确定最左边的坐标,从右到左确定最右边的坐标。
点赞 回复 分享
发布于 2017-08-23 12:29
一看就超时,这种死算逻辑肯定不是最优解
点赞 回复 分享
发布于 2017-08-23 12:45
其实最外层循环遍历最小值,内层循环找最小值存在的空间就好了,复杂度是100*500000
点赞 回复 分享
发布于 2017-08-23 12:47

相关推荐

08-23 10:20
湘南学院 Java
弓长门马:不要尬黑,这个公司桌子高,175以下坐下摸不到键盘
点赞 评论 收藏
分享
克蕾儿_:我不用点进来都知道评论区什么样子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务