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 :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何设置虚拟内存,让电脑运行的更快
- 下一篇: LSB最低有效位和MSB最高有效位