53.Maximum Subarray

    /** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我們從頭遍歷這個數組。對于數組中的其中一個元素,它只有兩個選擇: 1.* 要么加入之前的數組加和之中(跟別人一組) * 2. 要么自己單立一個數組(自己單開一組)* 所以對于這個元素應該如何選擇,就看他能對哪個組的貢獻大。如果跟別人一組* 能讓總加和變大,還是跟別人一組好了;如果自己起個頭一組,自己的值比之前加和的值還要大,那么還是自己單開一組好了。* 所以利用一個dp數組,記錄每一輪sum的最大值,dp[i]表示當前這個元素是跟之前數組加和一組還是自己單立一組好,然后維護一個全局最大值即位答案* 那么這道題目開始想能不能用maxSubArray(int A[], int i, int j), which means the maxSubArray for A[i: j].* 但是這么寫子函數就很難找到這種關系。那么我們接下來就怎么做呢?* maxSubArray(int A[], int i), which means the maxSubArray for A[0:i ] which must has A[i] as the end element.* 那么就下來的關系就是:* dp[i] = Math.max(A[i], dp[i - 1] + A[i]);* 也就是說對于A[i]到底加不加進來,我們只需要看這個加進來大還是單獨大。* 因為你如果加進來都比單獨大,那么后面還是一個增量。* 千萬不要寫成:dp[i] = Math.max(dp[i-1], dp[i - 1] + A[i]);
* Kadan's algorithm O(n) time and O(1) space
*/public static int maxSubArray(int[] A) {int[] dp = new int[A.length];int max = A[0];dp[0] = A[0];for (int i = 1; i < A.length; i++) {dp[i] = Math.max(A[i], dp[i - 1] + A[i]);
// 這里只比較了自己另外開一個,和原來的加一起開的區別max = Math.max(max, dp[i]);}
//不是每一個dp都是返回最后一個dp值哦!有可能返回全局變量
return max;}/** 下面是我自己的解法,開始想的有點復雜,然后后面仔細列舉一下也是蠻簡單的,這里用了一個dp數組* dp[i]表示包括i在內的連續數組的最大值,而不是到i最優的結果* [-1,-2]那么dp[1]=-3,因為要把-2包括進來* 那么如果每個數自己就很大,比加起前面累積的dp還大,那么久自成一家* 否則的話需要加起來,每次更新dp的時候與全局變量max比較一下*/public int maxSubArray1(int[] nums) {int len=nums.length;int max=nums[0];int[] dp=new int[len];dp[0]=nums[0];for(int i=1;i<len;i++){if(nums[i]>nums[i]+dp[i-1]){dp[i]=nums[i];max=Math.max(max,dp[i]);}else{dp[i]=dp[i-1]+nums[i];max=Math.max(max,dp[i]);}}return max;}

?

轉載于:https://www.cnblogs.com/zmyvszk/p/5469683.html

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

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

相關文章

java 創建者設計模式_Java設計模式之創建者模式分享熱愛編程,程序人生

PS:今天的23中設計模式中的創建者方式&#xff0c;至此告一段落。我今天帶來的技術分享為創建者模式以及原型模式。當然在Java中這兩種方式很常見&#xff0c;只不過我們寫的次數確實有點低而已&#xff0c;但是這不是我不學它的借口&#xff01;&#xff01;&#xff01;創建者…

一文讀懂電感器的原理、結構、作用及分類

電感器是能夠把電能轉化為磁能而存儲起來的元件。電感器的結構類似于變壓器&#xff0c;但只有一個繞組。電感器具有一定的電感&#xff0c;它只阻礙電流的變化。 如果電感器在沒有電流通過的狀態下&#xff0c;電路接通時它將試圖阻礙電流流過它&#xff1b;如果電感器在有電流…

final關鍵字與static對比

final關鍵字與static對比 static關鍵字修飾變量時&#xff0c;會使該變量在類加載時就會被初始化&#xff0c;不會因為對象的創建再次被加載&#xff0c;當變量被static 修飾時就代表該變量只會被初始化一次 例如圖中所示&#xff0c;被static修飾的變量j&#xff0c;雖然創建…

juce中的BailOutChecker

界面庫中值得注意的一點就是對象響應事件的時候自身被刪除了&#xff0c;那么后續的訪問自然就會出問題&#xff0c;所以需要在響應事件之后先添加引用&#xff0c;相關處理之后再查看自身是否已經被刪除&#xff0c;如果已經被刪除那么就直接退出。juce中通過BailOutChecker來…

java quartz 跳過_Java Quartz計劃作業-禁止同時執行作業

我正在使用Quartz Job執行特定任務。我也在我的Main應用程序類中安排它的執行&#xff0c;而我試圖完成的工作是不允許同時執行此作業的實例。因此&#xff0c;調度程序僅應在其先前實例完成后才執行作業。這是我的工作班級&#xff1a;public class MainJob implements Job {s…

mac USB串口工具配置

安裝USB serial 驅動 我的usb serial芯片是 pl2303, 先到官網上下載對應驅動&#xff0c;并安裝。安裝完成之后會要求重啟。 http://www.prolific.com.tw/admin/Technology/GetFile.ashx?fileID238 安裝 minicom https://alioth.debian.org/projects/minicom/ 下載源碼&…

macpro生成公鑰并查看公鑰

打開macpro的終端輸入以下命令&#xff1a; $ cd ~/.ssh $ ls 此時發現沒有那個id_rsa.pub文件&#xff0c;沒有&#xff0c;就需要創建公鑰 用ssh-keygen創建公鑰 此時已經有了

java join 源碼_join on 和where 一起使用的細節

left join :左連接&#xff0c;返回左表中所有的記錄以及右表中連接字段相等的記錄。right join :右連接&#xff0c;返回右表中所有的記錄以及左表中連接字段相等的記錄。inner join: 內連接&#xff0c;又叫等值連接&#xff0c;只返回兩個表中連接字段相等的行。full join:外…

SSIS 學習之旅 FTP訪問類

這章把腳本任務訪問FTP的方法 全部給大家。 控件的使用大家如果有不懂得可以看下我之前的文章。第一章&#xff1a;SSIS 學習之旅 第一個SSIS 示例&#xff08;一&#xff09;&#xff08;上&#xff09; 第二章&#xff1a;SSIS 學習之旅 第一個SSIS 示例&#xff08;二&#…

Spring Cloud Feign 使用Apache的HTTP Client替換Feign原生httpclient

http 連接池能提升性能 http 的背景原理 a. 兩臺服務器建立 http 連接的過程是很復雜的一個過程&#xff0c;涉及到多個數據包的交換&#xff0c;并且也很耗時間。 b. Http 連接需要的 3 次握手 4 次分手開銷很大&#xff0c;這一開銷對于大量的比較小的 http 消息來說更大。…

Java容器坐標起點_Java的屏幕坐標是以像素為單位,容器的左下角被確定為坐標的起點...

【單選題】【單選題】【單選題】class A{ int x1; void func1(int x1){ this.x1 x1; } } 關于上述程序,說法錯誤的是( )【單選題】瀏覽器的作用是( )。【判斷題】構建大學生心理危機預警及干預工作機制,更好地幫助有嚴重心理問題的學生度過心理難關,及早預防、及時疏導、有效干…

自媒體工具:文本內容轉音頻文件實用小工具

目錄 ?編輯 1、軟件介紹 2、軟件技術框架 3、使用說明 4、核心代碼文件 5、注意事項 1、軟件介紹 文本內容轉轉音頻文件小工具&#xff0c;采用C#編程語言&#xff0c;基于Framework4.5開發&#xff0c;主要采用百度語音識別SDK&#xff0c;實現了在線文本內容轉音頻文件的功能…

IDEA 創建 SpringCloud項目-多項目方式

SpringCloud 雖然可以用多模塊化的方式來創建&#xff0c;但是&#xff0c;SpirngCloud本身就是為分布式而準備的&#xff0c;如果使用多模塊的話&#xff0c;那就是一個項目&#xff0c;偏離了分布式的概念。所以工程上還是常用多項目的方式&#xff0c;這樣才可以分開布署各個…

php位運算重要嗎,PHP位運算的用途

下面為大家帶來一篇PHP位運算的用途。現在就分享給大家&#xff0c;也給大家做個參考。一起過來看看吧在實際應用中可以做用戶權限的應用我這里說到的權限管理辦法是一個普遍采用的方法&#xff0c;主要是使用到”位運行符”操作&#xff0c;& 位與運算符、| 位或運行符。參…

盤點6款實用的文件對比工具,你都用過嗎?

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

aggregations 詳解1(概述)

aggregation分類 aggregations —— 聚合&#xff0c;提供了一種基于查詢條件來對數據進行分桶、計算的方法。有點類似于 SQL 中的 group by 再加一些函數方法的操作。 聚合可以嵌套&#xff0c;由此可以組成復雜的操作&#xff08;Bucketing聚合可以包含sub-aggregation&#…

IDEA開發中,類的頭位置生成作者時間信息

點擊 File > Settings > File and Code Templates > Class按照圖中步驟添加如下信息 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") /** * Author WangZeyu * Date ${…

提現接口網站 php,API提現接口

>獲取提現積分的類型&#xff0c;在后臺可以設置某種積分可被提現&#xff0c;此處獲取的數據為可提現積分的類型~~~[api]get:/index.php/accounts/Apipoint/member_withdrawal_listint:type 0#是否智能限制提現積分類型&#xff0c;0&#xff1a;不智能&#xff0c;1&#…

數據庫:PostgreSQL 和 MySQL對比

比較版本&#xff1a;PostgreSQL 11 VS MySQL5.7&#xff08;innodb引擎&#xff09; Oracle官方社區版版權情況&#xff1a;PostgreSQL 11&#xff08;免費開源&#xff09;、MySQL5.7 Oracle官方社區版&#xff08;免費開源&#xff09; 1. CPU限制 PGSQL沒有CPU核心數限制&a…

C#獲取當前系統磁盤符、系統目錄、桌面等

1.獲取方式如下 Environment.SpecialFolder中定義了許多常用的目錄 //獲取當前系統磁盤符方法1&#xff0c;返回&#xff1a;C: string path Environment.GetEnvironmentVariable("systemdrive"); //獲取當前系統磁盤符方法2,返回&#xff1a;C: string path Envir…