zoukankan      html  css  js  c++  java
  • 网易云数据结构- Maximum Subsequence Sum

    题目


    题目地址

    思路


    显然是最大子列和的进化版,那就先思考下经典的最大子列和。这也是道思维题,啥算法也没用到,全是思维技巧,真心不知道考试遇到这种题该怎么办了。

    存放答案的一个类,我把它看成一个袋子,需要什么都可以“.”出来
    class ans
    {
    	static int maxsub = 0;
    	static int firstElement = 0;
    	static int lastElement = 0;
    	static int lastElementIndex = 0;
    }
    

    经典的最大子列和只是更新了maxsub,现在可以同时更新firstElement和lastElement,最后输出即可。

    这时更新一下
    		if (tempsum > ans.maxsub)
    			{
    				ans.lastElement = arr[i];
    				ans.firstElement = firstElement;
    				ans.maxsub = tempsum;
    			}
    以及
    这时更新一下
    	if (tempsum < 0)
    			{
    				if (i + 1 < arr.length)
    					firstElement = arr[i + 1];
    				tempsum = 0;
    			}
    对于为什么可以这样,我相信仔细思考一定能看懂。一定要先思考,再看答案,这样才能有共鸣。
    

    代码


    package 网易云数据结构;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.StreamTokenizer;
    import java.security.acl.LastOwnerException;
    import java.util.Scanner;
    
    public class Main
    {
    	public static void main(String[] args) throws IOException
    	{
    		StreamTokenizer in = new StreamTokenizer(new BufferedReader(
    				new InputStreamReader(System.in)));
    		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
    		in.nextToken();
    		boolean isAllNegative = true;
    
    		// 读入k个数据
    		int k = (int) in.nval;
    		int arr[] = new int[k + 1];
    		for (int i = 1; i <= k; i++)
    		{
    			in.nextToken();
    			arr[i] = (int) in.nval;
    			if (arr[i] >= 0)
    			{
    				isAllNegative = false;
    			}
    		}
    
    		// 处理数据
    		int tempsum = 0;
    		int firstElement = arr[1];
    		for (int i = 1; i < arr.length; i++)
    		{
    			tempsum += arr[i];
    
    			if (tempsum > ans.maxsub)
    			{
    				ans.lastElement = arr[i];
    				ans.firstElement = firstElement;
    				ans.maxsub = tempsum;
    			}
    			if (tempsum < 0)
    			{
    				if (i + 1 < arr.length)
    					firstElement = arr[i + 1];
    				tempsum = 0;
    			}
    		}
    
    		// 输出
    		if (isAllNegative)
    		{
    			System.out.println(0 + " " + arr[1] + " " + arr[arr.length - 1]);
    		} else
    			System.out.println(ans.maxsub + " " + ans.firstElement + " "
    					+ ans.lastElement);
    	}
    }
    
    class ans
    {
    	static int maxsub = 0;
    	static int firstElement = 0;
    	static int lastElement = 0;
    	static int lastElementIndex = 0;
    }
    
  • 相关阅读:
    数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现
    PL/SQL常用设置 可看引用位置更清晰直观 引自:http://blog.csdn.net/xiaoqforever/article/details/27695569
    Spring定时任务配置
    Log4日志配置及使用
    数据库 知识
    Magic-Club开发—第六天
    Magic-Club原型设计--第五天
    Magic-Club原型设计—第四天
    Magic-Club原型设计--第三天
    Magic-Club原型设计--第二天
  • 原文地址:https://www.cnblogs.com/sundy-lee/p/5241328.html
Copyright © 2011-2022 走看看