zoukankan      html  css  js  c++  java
  • 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的

    package test;
    
    import java.util.Arrays;
    
    /**
     * 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字),
     * 使得这个“子数组”的和是所有“子数组”和中最大的;
     * 如给定的数组为{12,-8, 5, 66, -21, 0 ,35, -44,7}, 
     * 则最大的和的子数组为{12, -8, 5, 66, -21, 0,35};
     *
     */
    public class MaxTest {
    	public static void main(String[] args) {
    		int[] data = { 12, -8, 5, 66, -21, 0, 35, -44, 7 };
    		data = maxData(data);
    		System.out.println(Arrays.toString(data));
    	}
    
    	// 未考虑两种情况:1.全是负数; 2.数组如{8, -8, 5, 6}
    	public static int[] maxData(int[] data) {
    		// 记录 开始与结束 的下标值
    		int first = 0, end = 0; 
    		
    		int maxSum = 0, thisSum = 0;
    		for (int i = 0, j = 0; i < data.length; i++) {
    			thisSum += data[i];
    			if (thisSum > maxSum) {
    				maxSum = thisSum;
    				first = j; // first为上次和小于0的值
    				end = i;
    			}
    			if (thisSum < 0) {
    				thisSum = 0;
    				j = i + 1;
    			}
    		}
    		System.out.println("最大值:" + maxSum + " 下标值: " + first + " -- " + end);
    	
    		// 可以使用Arrays的方法来获取数组
    		return Arrays.copyOfRange(data, first, end + 1);
    	}
    }
    

  • 相关阅读:
    算法导论笔记:21用于不相交集合的数据结构
    算法导论笔记:19斐波那契堆
    xfs管理2T以上大分区
    tcpdump确认服务器连接的交换机信息
    pcp分布式监控工具
    ssh相关命令
    一次ddos攻击
    ssh-agent && ssh-agent forward && SSH ProxyCommand
    变更hostname
    yum第三方源
  • 原文地址:https://www.cnblogs.com/xiaozhang2014/p/5297281.html
Copyright © 2011-2022 走看看