子序列進階問題

題目:

  有一個數組,讓找到兩個不重復的連續子序列A,B ,求Max(Sum(A)-Sum(B)

?

分析:

  1.   AB必定連續,設兩端連接處index為{X,x+1},X可取0~n-1
  2. ? ? ?設F(x)為連接處index為{X,x+1}時?Max(Sum(A)-Sum(B)的最大值
  3. ? ? ?設 left_max(x): 以x為以x處結尾的序列的最大值 類比設出:left_min(x)?right_max(x)?right_min(x)
  4. ? ? ?則F(x) = | left_max(x)-right_min(x) | 和? |?right_max(x)-left_min(x) |中的最大值
  5. ? ? ?Max(Sum(A)-Sum(B) 為F(0)~F(n-1)中的最大值

?

上代碼:

  1 /**
  2  * 
  3  */
  4 package maxsuma_sumb;
  5 /** 
  6  * @author 作者 : chenhao
  7  * @version 創建時間:2017-6-8 上午10:50:42 
  8  * @Exception : NULL
  9  * 類說明 
 10  */
 11 /**
 12  * @author chenhao
 13  *
 14  */
 15 
 16 import java.io.BufferedReader;
 17 import java.io.File;
 18 import java.io.FileInputStream;
 19 import java.io.FileNotFoundException;
 20 import java.io.FileOutputStream;
 21 import java.io.FileReader;
 22 import java.io.IOException;
 23 import java.io.InputStream;
 24 import java.io.InterruptedIOException;
 25 import java.io.OutputStream;
 26 import java.text.SimpleDateFormat;
 27 import java.util.ArrayList;
 28 import java.util.Arrays;
 29 import java.util.Date;
 30 import java.util.List;
 31 import java.util.Map;
 32 
 33 import jxl.*;    
 34 import jxl.write.*; 
 35 import jxl.write.biff.RowsExceededException;
 36 
 37 
 38 
 39 
 40 public class Main 
 41 {
 42     public static void main(String[] argv) throws IOException, RowsExceededException, WriteException{
 43     
 44         int[] nums = {1, 2, -3, 1, 1, 2, -3, 1,-9};
 45         int res = getmax(nums);
 46         System.out.println(res);        
 47         
 48     }
 49     
 50     public static int getmax(int[] nums){
 51         
 52         int length = nums.length;
 53         int[] pmaxs = positivemax(nums);
 54         int[] pmins = positivemin(nums);
 55         int[] rmaxs = reversemax(nums);
 56         int[] rmins = reversemin(nums);
 57         int result = 0;
 58         for(int i=0;i<length-2;i++){
 59             
 60               int x = Math.abs(pmaxs[i]-rmins[i+1]);
 61               int y = Math.abs(rmaxs[i+1]-pmins[i]);
 62               result = Math.max(Math.max(result , x) , y);
 63         }
 64         
 65         return result;
 66     }
 67     
 68     public static int[] positivemax(int[]nums){
 69         
 70         
 71         int len = nums.length;
 72         int[] max = new int[len];
 73         for(int i=0; i<len; i++){            
 74             if(i>0){
 75                 if(max[i-1]>0)
 76                     max[i]=max[i-1]+nums[i];
 77                 else
 78                     max[i]=nums[i];
 79             }
 80             if(i==0){
 81                 max[i]=nums[i];
 82             }
 83         }
 84         return max;
 85         
 86     }
 87     public static int[] positivemin(int[]nums){
 88         
 89         
 90         int len = nums.length;
 91         int[] min = new int[len];
 92         for(int i=0; i<len; i++){            
 93             if(i>0){
 94                 if(min[i-1]<0)
 95                     min[i]=min[i-1]+nums[i];
 96                 else
 97                     min[i]=nums[i];
 98             }
 99             if(i==0){
100                 min[i]=nums[i];
101             }
102         }
103         return min;
104         
105     }
106     
107     public static int[] reversemax(int[]nums){
108         
109         
110         int len = nums.length;
111         int[] max = new int[len];
112         for(int i=len-1; i>=0; i--){            
113             
114             if(i<len-1){
115                 if(max[i+1]>0)
116                     max[i]=max[i+1]+nums[i];
117                 else
118                     max[i]=nums[i];
119             }
120             if(i==len-1){
121                 max[i]=nums[i];
122             }
123         }
124         return max;
125         
126     }
127     
128     public static int[] reversemin(int[]nums){
129         
130         
131         int len = nums.length;
132         int[] min = new int[len];
133         for(int i=len-1; i>=0; i--){            
134             
135             if(i<len-1){
136                 if(min[i+1]<0)
137                     min[i]=min[i+1]+nums[i];
138                 else
139                     min[i]=nums[i];
140             }
141             if(i==len-1){
142                 min[i]=nums[i];
143             }
144         }
145         return min;
146         
147     }
148 }
View Code

?

轉載于:https://www.cnblogs.com/udld/p/7017147.html

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

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

相關文章

day5-shelve模塊

一、概述前面章節我們講述了json和pickle模塊的序列化和反序列化處理&#xff0c;他們有一個不足是在python 3中不能多次dump和load&#xff0c;shelve模塊則可以規避這個問題。shelve模塊是一個簡單的k,v將內存數據通過文件持久化的模塊&#xff0c;可以持久化任何pickle可支持…

程序員:請你不要對業務「置之不理」

成長是條孤獨的路&#xff0c;一個人會走得更快&#xff1b;有志同道合者同行&#xff0c;會走得更遠。本篇內容整理自 21 天鯤鵬新青年計劃線上分享內容。鯤鵬新青年計劃是由 TGO 鯤鵬會組織的線上分享活動&#xff0c;希望能幫助更多同學一起學習、成長。12 月 28 日&#xf…

在Ubuntu系統下如何將chrome瀏覽器的bookmarks導出到本地

1. 打開chrome瀏覽器在頁面的右上角點擊那個三個小點的位置&#xff0c;找到bookmarks&#xff0c;然后點擊bookmarks manager,然后在organize右側大倒三角下選擇&#xff0c;export bookmarks to HTML&#xff0c;選擇要保存的位置&#xff0c;利用同樣的方法下次就可以直接導…

php基于數組的分頁實現

關于數組的分頁函數,用數組進行分頁的好處是可以方便的進行聯合多表查詢,只需要將查詢的結果放在數組中就可以了以下是數組分頁的函數,函數page_array用于數組的分頁&#xff0c;函數show_array用于分頁函數的操作及顯示&#xff0c;需要配合使用.兩個函數通過全局變量$countpa…

028 -bash-4.1$ 出現故障的原理及解決辦法?

最近在搭建分布式的時候&#xff0c;出現了這個問題&#xff0c;很不爽。下面是我的解決方式。 1.在用戶下刪除bash rm -rf /home/beifeng/.bash* 2.拷貝 cp /etc/skel/.bash* /home/beifeng 3.退出&#xff0c;再進入用戶 4.解釋 set |grep -i ps1 轉載于:https://www.cnblogs…

彈出ifream

top.$.jBox("iframe:"${ctx}/synopsis/hmlwxSynopsis/addItem, {title: "添加作品",width: 1000, height: 500, buttons:{關閉: true,確定:ok},submit:function(v, h, f){},loaded: function (jboxContent) {$(jboxContent).css(overflow-x,);$(jboxConten…

ORB-SLAM2中的Loop Closinng中DetectLoopCandidates函數解析

/函數的三要素是&#xff1a;函數返回值類型&#xff0c;函數名稱&#xff0c;函數參數 函數的返回值是裝有關鍵幀指針的vector 該函數是類KeyFrameDatabase的成員函數,函數名是DetectLoopCandidate 該函數的參數分別是KeyFrame類型的指針變量 pKF和最小得分vector<KeyFrame…

NYOJ2—括號配對問題

括號配對問題 時間限制&#xff1a;3000 ms | 內存限制&#xff1a;65535 KB 難度&#xff1a;3描述現在&#xff0c;有一行括號序列&#xff0c;請你檢查這行括號是否配對。輸入第一行輸入一個數N&#xff08;0<N<100&#xff09;,表示有N組測試數據。后面的N行輸入多…

李彥宏千字愿景內部信:10次提到“用戶”

中新網1月17日電 1月17日&#xff0c;百度公司創始人、董事長兼CEO李彥宏發出一封內部信&#xff0c;信中&#xff0c;李彥宏向員工闡述了百度愿景&#xff1a;成為最懂用戶&#xff0c;并能幫助人們成長的全球頂級高科技公司。他提出&#xff0c;百度要持續創新&#xff0c;“…

spring-boot 速成(8) 集成druid+mybatis

spring-boot與druid、mybatis集成&#xff08;包括pageHelper分頁插件&#xff09;, 要添加以下幾個依賴項: compile(mysql:mysql-connector-java:6.0.5)compile(tk.mybatis:mapper-spring-boot-starter:1.1.1)compile(org.mybatis.spring.boot:mybatis-spring-boot-starter:1.…

ORB-SLAM2中生成金字塔提取FAST角點和計算BRIEF描述子

//這個是類ORBextractor的帶參構造函數&#xff0c;并且使用初始化列表對該類中的這5個變量賦值 ORBextractor::ORBextractor(int _nfeatures, float _scaleFactor, int _nlevels,int _iniThFAST, int _minThFAST):nfeatures(_nfeatures), scaleFactor(_scaleFactor), nlevels(…

我們怎樣確保從大數據計算中獲得價值

我們怎樣確保從大數據計算中獲得價值 支持大數據方案并不是在硬件以及軟件層次終止&#xff0c;企業要想真正地從大數據中受益&#xff0c;領導者必須改變思考與對待信息的方式。 我們怎樣確保從大數據計算中獲得價值&#xff1f; 當所有可用數據都可用時&#xff0c;大數據…

jsoncpp-src-0.5.0.tar.gz 源碼錯誤!!!!

近期在做畢設&#xff0c;使用到了JsonCpp0.5.0版本號的源碼&#xff01;依照網上的安裝配置教程&#xff0c;搭建好環境后就能夠使用了&#xff01; 在這里就不浪費空間去將怎樣搭建開發環境了&#xff01;請大家去google一下就好了&#xff01;在解析一個Json文件時。程序總是…

青海省多地日降水量突破歷史極值

受高原槽和西北冷空氣的共同影響&#xff0c;青海省海西州茫崖等多地日降水量突破歷史極值。 李萬花 攝 受高原槽和西北冷空氣的共同影響&#xff0c;青海省海西州茫崖等多地日降水量突破歷史極值。 李萬花 攝 中新網西寧1月18日電 (孫睿 趙海梅)記者18日從青海省氣象局獲悉&am…

ORB-SLAM2中四叉樹管理特征點

當從圖像金字塔中的每一層圖像上提取特征點之后&#xff0c;都要先用四叉樹技術對這些特征點進行管理 //該類中定義了四叉樹創建的函數以及樹中結點的屬性 //bool bNoMore&#xff1a; 根據該結點中被分配的特征點的數目來決定是否繼續對其進行分割 //DivisionNode()&#xff…

Python多線程3:queue

queue模塊實現了多生產者。多消費者隊列。在多線程環境下&#xff0c;該隊列能實現多個線程間安全的信息交換。 queue模塊介紹 模塊實現了3種類型的隊列&#xff0c;差別在于隊列中條目檢索的順序不同。在FIFO隊列中。依照先進先出的順序檢索條目。在LIFO隊列中&#xff0c;最后…

微信小程序教程02:App(Object)和Page(Object) 構造器介紹

在/app.js中&#xff0c;有方法App&#xff0c;它的作用是注冊整個小程序的應用&#xff0c;其中可以傳入一些配置&#xff0c;或者存儲全局狀態。 App(Object) 構造器生命周期 屬性類型描述onLaunchFunction在小程序初始化時觸發&#xff0c;全局僅觸發一次onShowFunction小程…

阿里云.log

申請證書審核失敗的原因及處理方法;( 新添加站點 免費版 SSL 網頁內不能有 HTTPS的連接&#xff1b;更多點擊連接) 轉載于:https://www.cnblogs.com/q1104460935/p/8287377.html

SharePoint Search之(七)Search result- 結果源

在使用搜索引擎的時候。非常多情況下&#xff0c;用戶希望限定一下搜索范圍&#xff0c;以便更加easy找到想要的結果。在SharePoint 2013的search里&#xff0c;也支持類似的功能&#xff0c;SharePoint 默認提供了幾種范圍&#xff1a; 在SharePoint&#xff0c;這個叫Search …