1. 程式人生 > >第一篇,記錄自己的學習經歷!(演算法,裝水問題)

第一篇,記錄自己的學習經歷!(演算法,裝水問題)

看看這個輸入:

如果答案計算的是極大值之間的水,就像這樣。

但是答案應該是在兩個高塔之間只有一池水:

以上題為例:

1)遍歷陣列找到陣列的最大值,記錄下來。

2)進行第二遍遍歷,從數為2開始,記錄volume為0;

3)2->5,此時左邊小於右邊,誰都會流失,所以volume還是為0,左邊最大又2變為5;

4)5->1,此時右邊小於左邊,又知最右邊還有更大的7,所以這一定能存貯水源,故volume=5-1=4;

5)5->3,同上,volume=5-3=2,再加上之前的此時volume=2+4=6;

6)5->1,同上,volume=(5-1)+6=10;

7)一次類推,直到7為止,然後從右邊開始向7推進,相同的步驟。

8)最後得出結果。

但在推進的結果中,發現,其實有更加優化的解法。不需要第一遍遍歷找出最大值,直接將陣列從兩邊向中間推進即可。

思路:

將陣列的起始index和最終index賦給兩個變數(left,right),然後左右兩端遍歷,一開始比較最左和最後端的值,選出較小的那一端,再讓較小的值與他相鄰的值比較(左端則比較arr[left]與arr[left+1],右端則比較arr[right]與arr[right-1])若小於則替換,volume為0。大於則計算出volume,畢竟另一端有更大的值,則一定能蓄水,這樣顯得有恃無恐,然後再進行下一次的遍歷。

附上程式碼:

public int getVolume(int[] arr){

   int left=0,right=arr.length-1;

   int max_l=arr[left],max_r=arr[right];

   int volume=0;

   while(left<right){

        if(max_l<max_r)

         {      

                 left=left+1;

                 if(arr[left]>max_l)

                       max_l=arr[left];

                 else

                       volume=volume+(max_l-arr[left]);

          }

          else

          {

                 right=right-1;

                 if(arr[right]>max_r)

                      max_r=arr[right];

                 else

                      volume=volume+(max_r-arr[right]);

           }

   }

   return volume;

}

相關推薦

第一記錄自己學習經歷演算法問題

看看這個輸入: 如果答案計算的是極大值之間的水,就像這樣。 但是答案應該是在兩個高塔之間只有一池水: 以上題為例: 1)遍歷陣列找到陣列的最大值,記錄下來。 2)進行第二遍遍歷,從數為2開始,記錄volume為0; 3)2->5,此時左邊小於右邊,誰都會流失,所以volume

如果迷茫靜下來學習Java初級的迷茫

        在一線城市,人來人往,每天看見人潮擁擠的地鐵站,看著那些人的身影覺得我和他們有什麼區別!一年的開發,一年的工作生活,使我的心態變老,我是一個剛剛畢業的年輕人啊!我是一個20出頭的年輕人,並且開發的路也才剛剛開始,怎麼可能就怎麼輕易的放棄了。        

目前研究生二年級還有兩個月找工作開貼記錄自己學習經歷

本科普通211高校,研究生末流985,光學工程專業就讀,由於老師的專案很坑比,靠專案找不到工作,而且老師還push的厲害。但是沒有辦法,找工作要緊,準備自學演算法。買了C語言,資料結構還有演算法書,現在開始自學。不知道有沒有高手指點下,學習這些夠不夠,目前還不確定自己就業方向

開博啦記錄自己學習Python的旅程歡迎交流-BY Joven

地址 打印 開博 back 這樣的 問題 由於 優劣 都是 第一天 選擇語言問題 本人是做數據的,本科學過C語言,有MATLAB數據分析基礎,目前正在接觸Python,前者國內用的比較多,後者國外比較多 這裏比較下倆者的優劣勢 MATLAB:主要做數據方面

沒錢一樣引爆產品推廣營銷推廣幹貨

網站建設 網站推廣 網站優化 咱們都知道,在資金不足的情況下,假如能有產品方以外的單位為產品進行二次傳達實在是濟困扶危。   那麽二次傳達怎樣取得?   本文將從結構下手處理這個問題,但限於篇幅以及閱覽體會,無法全部打開。該文本較長,信息量較大,但肯定幹貨。閱覽並了解大約需求15分鐘的時刻,一起每

從0到TrustZone第一:探究高通的 SEE安全可執行環境

轉載:http://www.freebuf.com/articles/system/103152.html 在本篇文章中,我們將討論高通安全執行環境(QSEE)。 之前討論過,裝置使用TrustZone的最主要的原因之一是它可以提供“可信執行環境(TEE)”,該環境可以保

Linux新手們請選擇ubuntu吧可以省很多心

前言  當看到很多人在說“怎麼安裝不上呀”“怎麼不能播放mp3呀”“搞了一個星期終於可以播放mp3,卻還要再用一個星期來弄得可以播放wma”等等問題的時候,感觸,特別地深……如果你是Linux新手,或者說,你想嚐嚐鮮,那麼,為了讓您省心,請不要選擇什麼redhat一類的發行版

記錄自己的支付整合微信&支付寶

首先,作為一個菜鳥表示,雖然網上的整合框架很多,但是我要自己寫,就算被坑的死去活來也要自己寫。 1. 支付寶 這個支付寶的文件是個好東西,挺簡單,挺容易看懂的,其次還有沙箱測試,表示支付寶一次通過很開心。 支付沙箱聯調指南

為了督促自己學習記錄自己成長的點滴

新手上路突發靈感想寫東西記錄一下,想起博文記錄自己的學過的東西,同時也希望能將自己學到的,踩過的坑分享給大家,如果有什麽寫得不好,有啥毛病大家可以直接指出,這是開頭為了督促自己學習,記錄自己成長的點滴

最近一個專案需要使用vue作為小白記錄一下自己學習歷程吧專案之環境配置

一、環境準備 1.git 2.19.0(免費、開源的分散式版本控制系統)   檢視git版本:安裝完成後,開啟命令提示符輸入      git  --version 2.nginx 1.15.3(高效能的HTTP和反向代理伺服器)   解壓後的檔案:   執行nginx: 開啟命令提示符視窗,切

【songrenqing】部落格主要是為了記錄自己學習python中遇到的問題解決問題的方法。有些問題早就存在解決問題的方法也有很多我只是把這些存在的問題和自己經過測試成功的方法重新記錄下來便於自己學習和重溫。

部落格主要是為了記錄自己在學習python中遇到的問題,解決問題的方法。有些問題早就存在,解決問題的方法也有很多,我只是把這些存在的問題和自己經過測試成功的方法,重新記錄下來,便於自己學習和重溫。...

在CSDN安家記錄自己學習歷程

之前就註冊了CSDN賬號,一直沒有開通部落格,也不知道寫些什麼。 最近常去聽宣講會,也和其他實驗室的同學交流,對於未來,自己有了大致的方向,必須為此堅持努力。 看了論壇裡面的師兄師姐在csdn記錄

vue-cli 中遇見的問題記錄爬坑日常

ges code spa jpg mage 插件 圖片 alt res 本片文章我將會記錄使用vue-cli 以及一些相關插件遇見的問題和解決方案,另外本文章將會持續更新,本著互聯網分享精神,希望我所記錄的日常能對大家有所幫助。 1、在img和html文件處於同級階段,im

第一、Android Supersu 權限管理定制隱藏過濾權限指定APP最高權限

權限 一律 例如 mod 系統 權限管理 過濾 tracking 屏蔽 近期有個需求,在預裝ROM的時候,須要權限,可是又不同意全部的應用都有權限,僅僅同意自己的應用有最高的權限(當然沒有系統簽名情況下)。 所以。編譯了CM 提取了supersu進行了二次定制,讓他進行

第一博客——python學習旅程開啟

今天 安裝 學習python 解釋型 student don and 變量的數據類型 系統 今天開始學習Python,以後會將自己的學習內容以及學習心得進行記錄,以博客的形式和廣大誌同道合的朋友分享,如有錯誤還請大家能夠批評指正,如果能幫到大家那就再好不過了。 今天的內容有

第一:基於深度學習的人臉特徵點檢測 - 背景轉載

轉載自:https://yinguobing.com/facial-landmark-localization-by-deep-learning-background/ 人臉檢測與識別一直是機器學習領域的一大熱點。人臉檢測是指從影象中檢測出人臉區域。人臉識別則是判斷特定的臉部影象是否與某個人對應

小白剛入門Python學完基礎後接下來的學習步驟建議收藏

自學Python要學多久可以學會? 如果是自學,從零基礎開端學習python的話,按照每個人理解能力的不同,大致上需求半年到一年半左右的時刻,當然,如果有其它程式設計言語的經歷,入門還是比較快的,大概需求2~3個月可以用Python言語編寫一些簡單的使用,只要進行體系的學習,才能更好的掌握Pyt

輕量級ORM框架——第一:Dapper快速學習

result htm 。。 使用 第一篇 rac 記錄 cat table      我們都知道ORM全稱叫做Object Relationship Mapper,也就是可以用object來map我們的db,而且市面上的orm框架有很多,其中有一個框架 叫做dapper,而

校園科技|Python監控學生電腦螢幕自動識別學習狀態

  技術要點 1)使用pillow擴充套件庫進行螢幕截圖; 2)使用多執行緒監聽學生端連線; 3)使用TCP協議傳輸螢幕影象;                 學習Python中有不明白推

股票小祕書幫你掌握「公司重大訊息」第一時間就先跑內付Python程式碼

利用手機的通訊軟體,剛午休起來,馬上就接受到訊息,即可開始準備操作了,從此不用在上班時候,偷偷的看盤,到最後事情沒做好,又措施了財經的重大訊息,得不償失。原始資料小祕書是利用爬蟲的技術,爬下公開資訊觀測站中的資訊,但與一般爬蟲不一樣的是,公開資訊觀測站是用post的方式傳送訊息,因此沒有辦法那麼簡單的取得資訊