1. 程式人生 > >今日頭條2018校招演算法方向(第一批)程式設計題2(列舉)

今日頭條2018校招演算法方向(第一批)程式設計題2(列舉)

給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個:

區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列  [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;

從上述計算可見選定區間 [6] ,計算值為 36, 則程式輸出為 36。

區間內的所有數字都在[0, 100]的範圍內;


輸入描述:
第一行輸入陣列序列長度n,第二行輸入陣列序列。
對於 50%的資料,  1 <= n <= 10000;
對於 100%的資料, 1 <= n <= 500000;


輸出描述:
輸出陣列經過計算後的最大值。

輸入例子1:
3
6 2 1

輸出例子1:
36
#include <bits/stdc++.h>
using namespace std;
int a[500005], pre[500005], l[500005], r[500005];
int main(){
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i){
		scanf("%d", &a[i]);
	}
	pre[0] = 0;
	for(int i = 1; i <= n; ++i){
		pre[i] = pre[i - 1] + a[i];
	}
	int L, R;
	for(int i = 1; i <= 100; ++i){
		L = 1;
		for(int j = 1; j <= n; ++j){
			if(a[j] < i){
				L = j + 1;
			}
			if(a[j] == i){
				l[j] = L;
			}
		}
	}
	for(int i = 1; i <= 100; ++i){
		R = n;
		for(int j = n; j >= 1; --j){
			if(a[j] < i){
				R = j - 1;
			}
			if(a[j] == i){
				r[j] = R;
			}
		}
	}
	int ans = 0;
	for(int i = 1; i <= n; ++i){
		ans = max(ans, (pre[r[i]] - pre[l[i] - 1]) * a[i]);
	}
	cout << ans << endl;
	
}

/*
題意:
5e5個數,求所有連續區間中區間和*區間最小值的最大值。

思路:
由於每個數的範圍很小,我們可以列舉每一個數字,假設它是所在區間中的最小數,然後看它最左最右的範圍。
預處理一下區間和,然後搞一下區間範圍,然後列舉答案。。。
*/


相關推薦

今日頭條2018演算法方向第一程式設計2列舉

給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個: 區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列  [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值: [6] = 6 * 6 = 3

今日頭條2018演算法方向--手串問題

題目: 作為一個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每個串珠要麼無色,要麼塗了若干種顏色。為了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不包含無色),在任意連續的m個串珠裡至多出現一次(注意這裡手串是一個環形)。手串上的顏色一共有c種。現在按順時針序告訴你

今日頭條2018-演算法方向題解

1.P為給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其為“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內) 如下圖:實心點為滿足條件的點的集合。請實現程式碼找到

位元組跳動2018演算法方向第一程式設計詳解

程式設計題1: P為給定的二維平面整數點集。定義 P 中某點x,如果x滿足 P 中任意點都不在 x 的右上方區域內(橫縱座標都大於x),則稱其為“最大的”。求出所有“最大的”點的集合。(所有點的橫座標和縱座標都不重複, 座標軸範圍在[0, 1e9) 內) 如下圖:實心點為

今日頭條2018測試開發方向(第一、二、三、四)程式設計彙總

對於今日頭條這家公司來說,測試的題和後端開發的題幾乎是一樣的,但是由於第一批的後端開發的題沒有在牛客網上放出來,因此,猜測後端開發第一批的題應該和後端開發第一批的題一樣,同時也想做一個測試方向程式設計題的彙總。 原題連結: 今日頭條2018校招測試開發方

今日頭條2018筆試題未完待續

第一題: #include <iostream> #include <vector> #include <string> using namespace std; void helper(const vector<vecto

今日頭條2017筆試題

問題描述: 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊,每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來,在選題之前,我們對題目進行了盲審,並定出了每道題的難度系統。一場考試包含3道開放性題目,假設他們

今日頭條2018後臺研發崗筆試題目

第一題 貼上大神的程式碼,採用雙指標實現 作者:vegetableB 連結:https://www.nowcoder.com/discuss/70299?type=0&order=0&pos=7&page=1 來源:牛客網

類與物件程式設計2C++程式設計第3周

問題描述 下面程式的輸出是: 10 請補足Sample類的成員函式。不能增加成員變數。 #include <iostream> using namespace std; clas

頭條今日頭條2017秋1——python解法

題目描述 頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊。每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來。在選題之前,我們對題目進行了盲審,並定出了每道題的難度係數。一場考試包含3道開放性題目,假設他們的難度從小到大分別為a, b, c,我

愛奇藝2018秋季演算法工程師第一[程式設計]括號匹配深度

時間限制:1秒 空間限制:32768K 來源:牛客網 一個合法的括號匹配序列有以下定義: 1、空串""是一個合法的括號匹配序列 2、如果"X"和"Y"都是合法的括號匹配序列,"XY"也是一個合法的括號匹配序列 3、如果"X"是一個合法的括號匹配序列,那麼"(X)"也是一個合法的括號匹配序列 4、

愛奇藝2018秋季演算法工程師第二場[程式設計]幸運子序列

連結:https://www.nowcoder.com/questionTerminal/872919272a33406a9c5ddc8b2f7532f4 來源:牛客網 牛牛得到一個長度為n的整數序列V,牛牛定義一段連續子序列的幸運值為這段子序列中最大值和次大值的異或值(次大值是嚴格的次大

迅雷--2018AI演算法筆試題

程式設計題 1. 輸入: 每行數字短橫符-分隔兩個陣列,冒號分隔:引數K 輸出: 輸出為和最大的K個數,和是兩個陣列中各一個數相加而得 樣例輸入: 2,4,2,7,7- 3,2,5,6,1,9:6 樣例輸出: 16,16,13,13,13,12 hint:

演算法崗經驗總結看了大概15篇左右面經

    聽說17年頭條演算法崗白菜價30W+,加上之前實驗室師兄說現在開發崗扎堆比較嚴重,建議我們研一的,離找工作還有一段時間的學弟學妹關注一下演算法崗。。。於是,一口氣刷了十幾篇演算法崗的面經。。。。 下面總結一下他們是如何準備的,還有留一些比較經典的非科班出身的演算法手的

今日頭條2018校園招聘後端方向(9.10)

時間限制:1秒 空間限制:65536K 題目描述 作為一個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每個串珠要麼無色,要麼塗了若干種顏色。為了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不能包含無色),在任意連續的m個串

網易2018筆試[程式設計] 字串碎片

一個由小寫字母組成的字串可以看成一些同一字母的最大碎片組成的。例如,”aaabbaaac”是由下面碎片組成的:’aaa’,’bb’,’c’。牛牛現在給定一個字串,請你幫助計算這個字串的所有碎片的平均長度是多少。 輸入描述: 輸入包括一個字串s,字串s的長度l

京東2018 神奇數 c/c++

廢話 上週末被學長遠端抓壯丁答狗東2018的C++筆試題。2個小時4道大題,一個人做確實時間緊,記錄一下學長甩給我第二題的神奇數。 想來自從6月份畢業就沒再做過題,手生寫的慢,好賴算是ac了,後來聽說這題現場ac率10%我也是挺吃鯨的 =、= 閒話不多說,

2018今日頭條演算法面試程式設計2

給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個:區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列  [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值:[6] =

這場尷尬的經歷Ⅰ--阿里螞蟻金服演算法工程師-機器學習

        本人上海某西南高校研究生,專業方向跟人工智慧沒有任何關係(雖然老闆總想扯上點關係),輔修了機器學習、深度學習等一些課程,當然沒有專案實踐,所以這是一場開始就知道結果的面試。         拜託一個朋友進行的內推,本來是想內推C/C++開發的,朋友說:“你這

2018vivo軟體開發崗提前筆試考點

vivio校招軟體開發崗(提前批) 題目型別:總共38道題目,60分鐘 25道選擇題,10道填空題,2道問答題,1道程式設計題 軟體開發崗涉及到的語言有:C, C++ Java (不要以為投的是C, C++,就不考Java了,這對非科班出身的不利,所有平時要多補補基礎知