【算法】LeetCode算法題-Maximum Subarray

這是悅樂書的第154次更新,第156篇原創

01 看題和準備

今天介紹的是LeetCode算法題中Easy級別的第13題(順位題號是53)。給定一個整數數組nums,找出一個最大和,此和是由數組中索引連續的元素組成,至少包含一個元素。例如:

輸入:[-2, 1, -3, 4, -1, 2, 1, -5,4]
輸出:6
說明:[4,-1,2,1]具有最大的和為6

輸入:[1, 2, 3]
輸出:6
說明:[1, 2, 3]具有最大的和為6

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

因為本題最后輸出的是最大值,所以需要進行求和,并且要從第一位元素開始,依次和相鄰元素相加來判斷。

第一次循環,得到數組第一個元素,與0相加,此時最大值是元素本身。

第二次循環,得到數組第二個元素,與第一個元素相加,此時相加的和需要先判斷是否大于第二個元素本身,因為如果兩個數的和還沒有本身大,那么此時最大和就是第二個元素本身。其次,還要和上一個和判斷,如果大于第一次循環得到的和,那么新的最大和即為第一個元素和第二個元素之和或者第二個元素本身;反之最大和依舊是第一次循環后的最大和。

后面的循環與上面一致,最開始第一次的循環也是如此,為了方便對比,只是詳細說明了第二次循環的處理邏輯。

public int maxSubArray(int[] nums) {int sum = 0;int max = Integer.MIN_VALUE;for (int i = 0; i < nums.length; i++) {sum += nums[i];if (nums[i] > sum) {sum = nums[i];}if (sum > max) {max = sum;}}return max;
}

對于上面的代碼,我們還可以再簡化下。

public int maxSubArray2(int[] nums) {int result = Integer.MIN_VALUE;int sum = 0;for (int i = 0; i < nums.length; i++) {sum = Math.max(nums[i] + sum, nums[i]);result = Math.max(result, sum);}return result;
}

03 第二種解法

還有一種思路,就是分而治之,將大問題拆分成小問題,找到小問題的答案后,最后合在一起再得出最后的答案。下面的代碼是討論區里某位大神的,可以好好看下。

public int maxSubArray3(int[] a) {return helper(a, 0, a.length - 1);
}int helper(int[] a, int l, int r) {if(l > r) return Integer.MIN_VALUE;if(l == r) return a[l];int mid = l + (r - l)/2;return Math.max(crossMidMax(a, l, r), Math.max(helper(a, l, mid - 1), helper(a, mid + 1, r)));
}int crossMidMax(int[] a, int l, int r) {int mid = l + (r - l)/2;int lmax = a[mid], lg =  a[mid];for(int i = mid -1; i >= l; i--) {lmax += a[i];lg = Math.max(lmax, lg);}int rmax = a[mid], rg =  a[mid];for(int i = mid +1; i <= r; i++) {rmax += a[i];rg = Math.max(rmax, rg);}return lg + rg - a[mid];
}

04 小結

今天此題涉及的分而治之算法,會寫在后面的算法和數據結構的理論知識介紹中,研究透徹了再和各位分享。以上就是全部內容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

轉載于:https://www.cnblogs.com/xiaochuan94/p/9864536.html

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

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

相關文章

windows配置solr5.5.2(不通過tomcat,使用內置jetty)

一、windows下配置solr5.5.2(不通過tomcat,使用內置jetty) 第一步&#xff1a;安裝Jdk1.7 Solr5.5好像只支持Jdk1.7及以上的版本&#xff0c;沒親測&#xff0c;solr6.0是只支持jdk1.8及以上的&#xff0c;下圖為啟動solr時的截圖&#xff1a; 如何在windows環境下配置jdk及驗證…

java起源英文_Abbreviation 英文詞組縮寫(來源:南陽理工大學ACM)java

As we know, we often use a short sequence of characters in place of some words with a very long name. For example, ACM is an abbreviation of “Association for Computing Machinery”. Now we are using an acronymic method to get the abbreviation. An acronym i…

【C# Personal Handbook】運行環境

一、CLR、CLI、CTS、CLS、BCL、FCL簡介CLI&#xff08;公共語言基礎&#xff09;CLI是微軟公司向ECMA提交的一份語言和數據格式規范&#xff0c;CLR是目前為止唯一一個公共語言基礎的實現版本。CLI包括了公共類型系統&#xff08;CTS&#xff09;、公共中間語言&#xff08;CIL…

如何完善自己的知識結構

★領域 &#xff08;本來想用“學科”這個詞&#xff0c;后來覺得“學科”的范疇還是偏小&#xff0c;就改用“領域”&#xff09;  按照傳統的習慣&#xff0c;通常會把知識歸類到不同的領域&#xff08;比如&#xff1a;文學、數學、計算機、烹調、等等&#xff09;。 ◇領…

MATLAB編程與應用系列-關于MATLAB編程入門教程的總體編寫安排

本系列教程來源于出版設計《基于MATLAB編程基礎與典型應用書籍》&#xff0c;如涉及版權問題&#xff0c;請聯系&#xff1a;156204968qq.com。 出版社&#xff1a;人民郵電出版社&#xff0c; 頁數&#xff1a;525。 本系列教程目前基于MATLABR2006a&#xff0c;可能對于更高級…

python語言特性-------python2.7教程學習【廖雪峰版】(一)

開始學習廖雪峰的py2.7教程&#xff1a; 2017年6月5日12:54:28 筆記&#xff1a; 廖雪峰python2.7教程1.用任何編程語言來開發程序&#xff0c;都是為了讓計算機干活。 2.Python是一種相當高級的語言。代碼少還不好&#xff1f;代碼少的代價是運行速度慢。3.用Python可以做什么…

java調c++代碼_Java中調用C++代碼的實現 | 學步園

JNI為 Java Native Interface 即Java本地接口&#xff0c;使用此種方式可以對C/C代碼進行調用&#xff0c;其在本質上是對C/C生成的動態庫進行調用而不是直接對C/C代碼進行調用Java代碼如下&#xff1a;public class TestJNI{//JNI在本質上是調用C/C的動態庫來實現的&#xff…

jeesite1.X 集成多數據源

2019獨角獸企業重金招聘Python工程師標準>>> 網上看了幾個例子&#xff0c;都是相同數據源的動態切換&#xff0c;如果不是同一種數據庫類型&#xff0c;分頁查詢就出問題。經過研究解決問題。 jeesite.properties配置多數數據源地址,這里以mysql5.7和sqlserver2008…

k8s HPA(HorizontalPodAutoscaler)-自動水平伸縮

Horizontal Pod Autoscaling in Kubernetes寫在前面我們平時部署web服務&#xff0c;當服務壓力大撐不住的時候&#xff0c;我們會加機器(加錢)&#xff1b;一般沒有上容器編排是手動加的&#xff0c;臨時加的機器&#xff0c;臨時部署的服務還要改Nginx的配置&#xff0c;最后…

jQuery 基金會和 Dojo 基金會合并:Open Web

統一基金會&#xff0c;服務開發人員&#xff0c;推動開放 Web 技術發展jQuery 基金會和 Dojo 基金會今天宣布計劃聯合&#xff0c;旨在建立最大&#xff0c;最多樣化和最全面的基金會&#xff0c;通過服務開發者&#xff0c;他們的項目&#xff0c;他們的社區來構建開放的 Web…

spark java 邏輯回歸_邏輯回歸分類技術分享,使用Java和Spark區分垃圾郵件

原標題&#xff1a;邏輯回歸分類技術分享&#xff0c;使用Java和Spark區分垃圾郵件由于最近的工作原因&#xff0c;小鳥很久沒給大家分享技術了。今天小鳥就給大家介紹一種比較火的機器學習算法&#xff0c;邏輯回歸分類算法。回歸是一種監督式學習的方式&#xff0c;與分類類似…

jQuery.extend()方法

定義和用法jQuery.extend()函數用于將一個或多個對象的內容合并到目標對象。 注意&#xff1a; 1. 如果只為$.extend()指定了一個參數&#xff0c;則意味著參數target被省略。此時&#xff0c;target就是jQuery對象本身。通過這種方式&#xff0c;我們可以為全局對象jQuery添加…

1066. 圖像過濾(15)

原題: https://www.patest.cn/contests/pat-b-practise/1066 思路: 開胃小菜 實現: #include <stdio.h>int main (void) {int m;int n;int a;int b;int c;char ch;int tmp;int i;int j;scanf("%d %d %d %d %d", &m, &n, &a, &b, &c);// 題…

Wget用法、參數解釋的比較好的一個文章

一個語句就可以下載cvpr2016的全部論文&#xff1a; wget -c -N --no-clobber --convert-links --random-wait -r -p -E -e robotsoff -U mozilla http://www.cv-foundation.org/openaccess/CVPR2016.py 其中&#xff0c;-c表示斷點續傳&#xff1b;-N表示已經下載的內容不再重…

.NET VS智能提示漢化 (.Net6)

先上現成的.net6漢化文件&#xff0c;可以手動下載后參照 [如何為 .NET 安裝本地化的 IntelliSense 文件 ](https://learn.microsoft.com/zh-cn/dotnet/core/install/localized-intellisense)進行安裝。或者使用后文的工具進行自動安裝。無對照英文在前中文在前漢化內容來自 官…

go 返回mysql數組_Go基礎之--操作Mysql(一)

關于標準庫database/sqldatabase/sql是golang的標準庫之一&#xff0c;它提供了一系列接口方法&#xff0c;用于訪問關系數據庫。它并不會提供數據庫特有的方法&#xff0c;那些特有的方法交給數據庫驅動去實現。database/sql庫提供了一些type。這些類型對掌握它的用法非常重要…

Vue CLI 3開發中屏蔽煩人的EsLint錯誤

問題 Vue開發中&#xff0c;特別是當你閱讀分析別人的其中早期版本的Vue代碼時往往會遭遇到滿屏幕的煩人的EsLint錯誤。有關EsLint這個工具的作用不再贅述。查閱網上參考文檔&#xff0c;大多是針對早起版本Vue CLI工具項目的&#xff0c;在我最新使用的Vue CLI 3生成的工程中根…

pyinstaller---將py文件打包成exe

pyinstaller可將Python腳本打包成可執行程序&#xff0c;使在沒有Python環境的機器上運行。 1.pyinstaller在windows下的安裝 直接在命令行用pip安裝 pyinstaller&#xff0c; 在windows下&#xff0c;pyinstaller需要PyWin32的支持。當用pip安裝pyinstaller時未找到PyWin32&am…

老人尋求到一名程序員,用2W行代碼給自己打造了一幅肖像畫

今天翻墻看了下國外的論壇&#xff0c;看到了一位版主給一位老人描繪肖像畫的文章&#xff0c;不得不說這位大佬是真的厲害&#xff0c;近20000行代碼&#xff0c;而且還畫的很像&#xff0c;像小編我這種手殘黨&#xff0c;用筆也不能畫出來&#xff0c;不得不服&#xff0c;今…

一題多解,ASP.NET Core應用啟動初始化的N種方案[下篇]

[接上篇]“天下大勢&#xff0c;分久必合&#xff0c;合久必分”&#xff0c;ASP.NET應用通過GenericWebHostService這個承載服務被整合到基于IHostBuilder/IHost的服務承載系統中之后&#xff0c;也許微軟還是意識到Web應用和后臺服務的承載方式還是應該加以區分&#xff0c;于…