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;
    	}
    	
    }
    


     

  • 相关阅读:
    flutter学习笔记一 基础
    android studio创建flutter 项目卡住,一直在创建。 命令行新建flutter项目
    flutter项目运行之 a problem occurred evaluating project ':app'. Could not resolve all artifacts for configuration 'classpath'. Could not find com.android.tools.build:gradle:3.5.0.
    Flutter环境搭建 之 Android license status unknown
    团队作业-第五周-运行及总结
    团队作业-第五周-测试与调试
    团队作业-第四周-面向对象程序设计
    团队作业-第三周-设计类图
    团队作业-第二周-SRS文档
    团队作业-第二周-测试计划
  • 原文地址:https://www.cnblogs.com/riskyer/p/3310642.html
Copyright © 2011-2022 走看看