zoukankan      html  css  js  c++  java
  • 最长子序列和(由浅入深)

    O(N^2)

    package heng.java.level1;
    
    import java.util.Scanner;
    
    public class TheMostLongSequenceSum4 {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int m = input.nextInt();
    		while(m-->0){
    			int n = input.nextInt();
    			int [] arr = new int [n];
    			for (int i = 0; i < n; i++) {
    				arr[i] = input.nextInt();
    			}
    			int max = maxSubSum(arr);
    			System.out.println(max);
    		}
    	}
    	public static int maxSubSum(int []arr){
    		int maxSum = 0;
    		for (int i = 0; i < arr.length; i++) {
    			int thisSum = 0;
    			for (int j = i; j < arr.length; j++) {
    				thisSum += arr[i];
    				if(thisSum > maxSum){
    					maxSum = thisSum;
    				}
    			}
    		}
    		return maxSum;
    	}
    
    }
    

     O(1)

    package heng.java.level1;
    
    import java.util.Scanner;
    
    public class TheMostLongSequenceSum3 {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int m = input.nextInt();
    		while(m-->0){
    			int n = input.nextInt();
    			int [] arr = new int [n];
    			for (int i = 0; i < n; i++) {
    				arr[i] = input.nextInt();
    			}
    			int max = maxSubSum(arr);
    			System.out.println(max);
    		}
    		
    	}
    	public static int maxSubSum(int []arr){
    		int maxSum = 0, thisSum = 0;
    		for(int j=0; j<arr.length; j++){
    			thisSum += arr[j];
    			if(thisSum > maxSum){
    				maxSum = thisSum;
    			}else if(thisSum < 0){
    				thisSum = 0;
    			}
    		}
    		return maxSum;
    	}
    }
    


     

    O(N) 

    递归&&分治法:

    package heng.java.level1;
    
    import java.util.Scanner;
    
    public class TheMostLongSequenceSum2 {
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		int m = input.nextInt();
    		
    		while(m-->0){
    			int n = input.nextInt();
    			int [] arr = new int [n];
    			for (int i = 0; i < n; i++) {
    				arr[i] = input.nextInt();
    			}
    			int max = maxSumRec(arr,0,arr.length-1);
    			System.out.println(max);
    			
    		}
    	}
    	public static int maxSumRec(int []arr, int left, int right){
    		if(left == right){
    			if(arr[left] > 0){
    				return arr[left];
    			}else{
    				return 0;
    			}
    		}
    		int center = (left+right)/2;
    		int maxLeftSum = maxSumRec(arr,left,center);
    		int maxRightSum = maxSumRec(arr,center+1,right);
    		
    		int maxLeftBorderSum=0,leftBorderSum=0;
    		for(int i=center; i>=left; i--){
    			leftBorderSum += arr[i];
    			if(leftBorderSum > maxLeftBorderSum){
    				maxLeftBorderSum = leftBorderSum;
    			}
    		}
    		int maxRightBorderSum=0,rightBorderSum=0;
    		for(int i=center+1; i<=right; i++){
    			rightBorderSum += arr[i];
    			if(rightBorderSum > maxRightBorderSum){
    				maxRightBorderSum = rightBorderSum;
    			}
    		}
    		int sum = maxRightBorderSum+maxLeftBorderSum;
    		if(sum < maxLeftSum) sum = maxLeftSum;
    		if(sum < maxRightSum) sum = maxRightSum;
    		return sum;
    	}
    	
    }
    


     

  • 相关阅读:
    UWP 常用文件夹
    UWP 判断Windows10系统版本
    UWP 图片缩放
    Windows 10「设置」应用完整MS-Settings快捷方式汇总
    UWP 用Thumb 控件仿制一个可拖动悬浮 Button
    【mp3】洗脑循环了!龙珠超 自在极意功 【究极の圣戦】串田アキラ 背景纯音乐
    工作三年后的总结
    css3 移动端 开关效果
    js 移动端上拉加载下一页通用方案
    【我的上传番剧/电影】收藏夹
  • 原文地址:https://www.cnblogs.com/riskyer/p/3310642.html
Copyright © 2011-2022 走看看