• 求最大子数组


    要求:

    输入一个整形数组,数组里有正数也有负数。

    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

    求所有子数组的和的最大值。要求时间复杂度为O(n)

    设计思想:

    数组中有正有负,子数组的和最大值就不一定是元素个数最多的那个子数组。所以开始从0遍历,先求两个元素的子数组的最大值,然后以此类推,通过比较,if判断,把最大值赋给max。

    代码:

    import java.util.Scanner;

    public class shuzu {

        public static void main(String[] args) {     

            Scanner scanner=new Scanner(System.in);

            System.out.println("请输入数字的数量:");

            int n=scanner.nextInt();

            int[] a=new int[n];

            System.out.println("请输入数组的数值:");

            for(int i=0;i<n;i++){

                a[i]=scanner.nextInt();

            }

            for(int i=1;i<n;i++){

                if(a[i]+a[i-1]>a[i])

                    a[i]=a[i]+a[i-1];

            }

            int ans=-1000;

            for(int i=0;i<n;i++)

            {

                if(a[i]>ans)

                    ans=a[i];//找取最大值

            }

            System.out.println(ans);

        }

    }

    截图:

     

     

     

     总结:

    求一个最大子数组和,看似简单,其实不然。通过这个实验,练习了算法。我觉得算法难的地方是思路,思路清晰了写起来会好很多。

  • 相关阅读:
    (DP+二分查找) leetcode 300. Longest Increasing Subsequence, 673. Number of Longest Increasing Subsequence
    linux
    电脑突然找不到wifi 的解决方法
    (字典序) leetcode 316. Remove Duplicate letters
    vector insert()
    randrange
    blur、medianBlur、GaussianBlur
    clip
    choice
    randint
  • 原文地址:https://www.cnblogs.com/shumouren/p/13090293.html
Copyright © 2020-2023  润新知