滴滴出行2016校招編程題

1. 給定一個m*n的數組(m,n>=2,數組值>=0),要求選出和最大的子2*2數組。例如:

1 2 3

4 5 6

7 8 9

顯然和最大的2*2子數組是5 6;8 9.下面完成這個功能。

Input: (m*n的數組)

? ? ? ? ? ? 1 2 3 ; 4 5 6 ; 7 8 9

Output: (最大的和)

? ? ? ? ? ? ? 28

解析:這個問題我覺得有兩個難點,第一個就是二維數組的生成,初始時刻給了我們一行字符串,格式如上。我們需要從中讀取二維數組,第二個就是核心算法,這里我們使用暴力解法,兩行兩列地逐步向后向下推進,直到找到最大的和。

代碼:?

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
using namespace std;vector<string> split( string str,  string pattern)//分割字符串,分隔符是pattern
{vector<string> result;str += pattern;//擴張字符串以方便操作string::size_type pos;int n = str.size();for (int i = 0; i < n;i++){pos = str.find(pattern, i);if (pos<n){string s = str.substr(i, pos - i );result.push_back(s);i = pos +pattern.size()- 1;}}return result;}
int main()
{//讀取二維數組string str;getline(cin, str);vector<string> vecstr = split(str, ";");//第一次分割int m = vecstr.size();//m行int n;//列數vector<vector<int> > arr(m);for (int i = 0; i < m;i++){vector<string> vecstr2 = split(vecstr[i]," ");n = vecstr2.size();arr[i].reserve(n);for (int j = 0; j < n; j++){arr[i].push_back(atoi(vecstr2[j].c_str()));}}//找到最大的和int maxsum = 0;int row , column ;for (int i = 0; i < m - 1; i++)for (int j = 0; j < n - 1; j++){int sum = arr[i][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1];if (maxsum < sum){row = i;column = j;maxsum = sum;}}cout << "最大的子數組是:" << endl;cout << arr[row][column] << "\t" << arr[row][column + 1] << endl;cout << arr[row + 1][column] << "\t" << arr[row + 1][column + 1] << endl;cout << "最大的和是" << maxsum << endl;}
結果:
1 2 3;4 5 6;7 8 9
最大的子數組是:
5 ? ? ? 6
8 ? ? ? 9
最大的和是28
請按任意鍵繼續. . .


2.已知有一個數組,有正數、負數、0,要求輸出和為0的最長連續子數組。

Input: -1 0 1 2 -1 -2 3 4 -4?

Output:?0 1 2 -1 -2?

解析:

? ? ? ? ? 定義i,j,讓i從前往后遍歷,在i確定的時候,讓j從后往前遍歷,直到遇到第一個為0的時候停下來,計算i,j之間的距離,然后i繼續遍歷,選最長的即可。同時為了節約時間,一旦有一種情形的長度超過整體長度的一半,則i只需遍歷到整體的前一半即可。

代碼:

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
#include <sstream>
#include <numeric>
using namespace std;
typedef vector<int> vecint;
vecint max_subarray(string str)
{stringstream s(str);vecint data,subdata;data.reserve(str.length());int t;while (s>>t){data.push_back(t);}int n = data.size();int disnum = 0;int low=-1, high=-1;for (int i = 0; i < n;i++){if (i >= n / 2 && disnum >= n / 2){break;}int sum = accumulate(data.begin() + i, data.end(), 0);int j = n - 1;while (sum!=0&&j>=i){sum -= data[j--];}if (sum == 0 && (disnum<(j - i + 1))){disnum =j - i + 1;//子數組的長度low = i;high = j;}}if (disnum!=0){for (int k = low; k <= high; k++){subdata.push_back(data[k]);}}return subdata;}int main()
{string str;getline(cin, str);vecint subarray = max_subarray(str);if (subarray.empty()){cout << "there's not such subarray that sum equals to zero" << endl;}else{cout << "Result has founded:" << endl;copy(subarray.begin(), subarray.end(), ostream_iterator<int>(cout, " "));}
}

結果:

-1 0 1 2 -1 -2 3 4 -4
Result has founded:
0 1 2 -1 -2 請按任意鍵繼續. . .













本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259128.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259128.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259128.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每天一個linux命令(22):find 命令的參數詳解

find一些常用參數的一些常用實例和一些具體用法和注意事項。 1&#xff0e;使用name選項&#xff1a; 文件名選項是find命令最常用的選項&#xff0c;要么單獨使用該選項&#xff0c;要么和其他選項一起使用。 可以使用某種文件名模式來匹配文件&#xff0c;記住要用引號將文件…

(WPF) DataGrid之綁定

通過ObservableCollection 綁定到 DataGrid. 1. 前臺Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=數據結構+算法

這句名言&#xff0c;我現在品來很有感覺&#xff0c;看看uc/os-II里面那些就緒表、查找最高優先級任務等等&#xff0c;算法設計的非常巧妙&#xff0c;整個OS都是圍繞著OS_TCB來運轉的&#xff0c;任務需要通信&#xff0c;那就在建立個OS_EVENT&#xff0c;通過.*OSTCBEvent…

去哪筆試兩題

1&#xff0c;a是一個有序數組&#xff0c;但經過向右移動數位&#xff0c;現在預在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 實現&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主從復制搭建基于日志(binlog)

什么是MySQL主從復制 簡單來說&#xff0c;就是保證主SQL&#xff08;Master&#xff09;和從SQL&#xff08;Slave&#xff09;的數據是一致性的&#xff0c;向Master插入數據后&#xff0c;Slave會自動從Master把修改的數據同步過來&#xff08;有一定的延遲&#xff09;&…

opengl 如何加陰影_動漫嘴唇厚涂如何繪制?厚涂嘴唇正確畫法

動漫嘴唇厚涂如何繪制&#xff1f;厚涂嘴唇正確畫法&#xff01;嘴巴怎么畫&#xff1f;畫嘴巴真的很考驗一個畫師功力&#xff0c;好看的嘴巴生動而豐滿&#xff0c;可以給整幅畫作添上亮點&#xff0c;而畫的不好的嘴巴呢&#xff0c;就容易把畫面整體的風格打破。那么零基礎…

位運算

我們復習一下位運算&#xff0c;這里介紹一下(& ,|, ^)的用途。 按位與 ------------& 規則&#xff1a; 0&00 0&10 1&0 0 1&11 &#xff08; 兩位為1&#xff0c;才是1&#xff09;作用&#xff1a; 清零與保位。通常用來將特定的位清零&…

詳解JMeter函數和變量

詳解JMeter函數和變量&#xff08;1&#xff09; JMeter函數可以被認為是某種特殊的變量&#xff0c;它們可以被采樣器或者其他測試元件所引用。函數調用的語法如下&#xff1a; ${__functionName(var1,var2,var3)} 其中&#xff0c;__functionName匹配被調用的函數名稱。用圓括…

信號反射

突然想起來前幾天調試CAN通訊的時候出現的BUG&#xff0c;那就是傳說中的“信號反射”&#xff0c;也有稱“振鈴”的。錯誤剛出現的時候沒有意識過來&#xff0c;還說怎么出現重復出現這么多條消息呢&#xff1f;光在書本上看到過這個概念&#xff0c;沒有“實物”與之對應起來…

hdu 5199 map或二分或哈希

題目描述&#xff1a;給出n棵樹的高度&#xff0c;每棵樹上都站著一只鳥&#xff0c;槍手Jack站在最左邊那棵樹的左邊對鳥進行射擊&#xff0c;當Jack在高度為H的地方向右發射一顆子彈的時候&#xff0c;高度為H的樹上的鳥兒就會掉落&#xff08;注&#xff1a;其他樹上的鳥兒不…

數字電路實驗怎么接線視頻講解_家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接?手把手教你...

家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接&#xff1f;手把手教你有不少用戶收到從家庭影院器材之后&#xff0c;表示完全不會連接。翻看說明書也覺得頭大&#xff0c;知識太多&#xff0c;然而卻很難找到要點。今天主要跟大家講講如何連接音箱、功放、投影機和影…

.NET開發過程中的全文索引使用技巧之Solr

前言&#xff1a;相信許多人都聽說過.net開發過程中基于Lucene.net實現的全文索引&#xff0c;而Solr是一個高性能&#xff0c;基于Lucene的全文搜索服務器。同時對其進行了擴展&#xff0c;提供了比Lucene更為豐富的查詢語言&#xff0c;同時實現了可配置、可擴展并對查詢性能…

關于字符的讀入與輸出

在筆試中&#xff0c;經常見到字符的讀入與輸出的題目。逆序打印輸入時最常見、最基本的考題&#xff0c;復雜點的就是統計單詞、逆序打印單詞之類的。難點是如何判斷輸入的結束&#xff0c;如果用getchar函數&#xff0c;其輸入結束符為EOF&#xff08;其打印值為-1&#xff0…

修正discuz發帖首次換行無效的問題

找遍了百度和google都沒有解決方案&#xff0c;連discuz官方都沒有出來解決&#xff0c;至今其官網仍有這個問題。 那就自己動手解決吧&#xff0c;順手打個補丁。雖然走了小路&#xff0c;但是能解決問題。 解決方案&#xff1a;修改static/js/bbcode.js 找到 html2bbcode()方…

auto.js停止所有線程_Java線程與并發編程實踐:深入理解volatile和final變量

同步有兩種屬性&#xff1a;互斥性和可見性。synchronized關鍵字與兩者都有關系。Java同時也提供了一種更弱的、僅僅包含可見性的同步形式&#xff0c;并且只以volatile關鍵字關聯。假設你自己設計了一個停止線程的機制(因為無法使用Thread不安全的stop()方法))。清單1中Thread…

項目實例改編:利用structs2的action 實時顯示圖片、pdf和其他內容的框架抽取。(轉)...

轉自&#xff1a;http://www.verydemo.com/demo_c167_i1382.html 針對&#xff1a;預覽文件&#xff08;圖片&#xff0c;PDF&#xff09;文件來源為action中的inputStream 重點&#xff1a; structs2的action的配置 action的寫法和結果類型 resulttype的寫法 網頁上實…

零碎的小知識點 ----------C# ToString()函數注意事項

C#中存在著大量的字符串操作&#xff0c;有專門的string類&#xff0c;各種各種的方法&#xff0c;其中使用最為頻繁的方法為ToString()&#xff0c;用起來很是順手&#xff0c;但是這里存在一個很大的問題&#xff0c;空字符是不能用ToString方法轉換的&#xff0c;不然就會報…

ios越獄系統UIGestureRecognizer事件截獲問題

越獄的機器給self.view設置一個UITapGestureRecognizer,這貨就把所有的點擊事件全截獲了,比如某個按鈕,點擊就沒效果.普通系統是沒有問題的. 因此要給UIGestureRecognizer設置delegate并且在其中對touch的view進行分別處理 比如要讓按鈕功能正常使用: 1 #pragma mark - UIGestu…

開始Go開發之旅-Golang架構師之路系列實戰

2019獨角獸企業重金招聘Python工程師標準>>> 作者: gomaster.me(馮琪超) 系列:Golang架構師之路 巧婦難做無米之炊&#xff0c;golang sdk就是gopher的大米 下載golang 點擊 官網下載golang sdk 根據不同系統&#xff0c;官網下載鏈接會選擇相應的平臺進行鏈接跳轉&…

delete與delete[]的區別

一直對C中的delete和delete[]的區別不甚了解&#xff0c;今天遇到了&#xff0c;上網查了一下&#xff0c;得出了結論。做個備份&#xff0c;以免丟失。 C告訴我們在回收用 new 分配的單個對象的內存空間的時候用 delete&#xff0c;回收用 new[] 分配的一組對象的內存空間的時…