日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java取出连续子串_JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串...

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java取出连续子串_JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思想:將要進行的檢測的數據錄入到數組中。然后依次將數組中的數據相加求和,定義max變量,begin變量,top變量以及last變量。begin變量用于記錄最大值子串的起始位置,那么一開始就應該是1。last變量用于記錄子串的末尾位置,相應的一開始也應該為1。之后利用循環進行累和,top變量用于記錄每次累和后的結果。如果當前累和的結果大于上一次累和的結果(top>max)那么最大值需要更新,起始位置不變,末尾位置向后變化(last = j+1)。如果當前累和的結果小于上一次累和的結果,則起始位置與末尾位置均不改變,但繼續進行求和。當求和的結果小于0時(top<0),則需要重新進行累和,用rebegin變量記錄下重新累和的起始位置。因為前邊的和為負數,任何數與負數相加都會比本身小,沒有意義。如果重新累和后的結果大于了之前的max那么最大值更新,起始位置則為rebegin記錄的位置(begin = rebegin),對于末尾位置,當max得到更新時,last也得到了更新。

具體情況大致分為4種:

1.前一部分為最大值。 ? 例如:數據為:1 2 -4 1 ?該組數據中最大值為3,起始位置為1,末尾位置為2。

2.后一部分為最大值。 ? 例如:數據為:1 2 -4 4 ?該組數據中最大值4,起始位置為4,末尾位置為4。

3.中間部分為最大值。 ? 例如:數據為:1 1 -3 5 4 -4 3 ? 該組數據中最大值為9,起始位置為4,末尾位置為5。

4.全串為最大值。 ? ? ? ? ? 例如:數據為: 1 5 -1 6 該組數據中最大值為11,起始位置為1,末尾位置為4。

import java.util.Scanner;

//和最大的子串

public class ZichuanQiuhe {

public static void main(String args[])

{

Scanner sc= new Scanner(System.in);

int tmp = sc.nextInt();

int temp[] = new int[tmp]; //對相關數列進行錄入

int top = 0,max = 0,begin = 1,last = 1,rebegin = 1;

for(int i = 0;i

{

temp[i] = sc.nextInt();

}

for(int j = 0 ; j < temp.length; j++) //求最大值操作

{

top+=temp[j];

if(top>max)

{

begin = rebegin; //記錄起始點,并實現起始點的更新與替換

max = top; //子序列的最大值

last = j+1; //記錄末尾點,隨著數據的累和,向后逐漸更新

}

if(top < 0)

{

rebegin = j+2;

top = 0;

}

}

System.out.println("最大值="+max);

System.out.println("起始位置="+begin+","+"終點位置="+last);

}

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java取出连续子串_JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。