zoukankan      html  css  js  c++  java
  • 个人作业1-数组

    题目:返回一个整数数组中最大子数组的和。

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

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

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

    设计思路:首先创建一个数组,生成随机数。

    将数组里的数字相加,将相加的结果与第二个数作比较,如果大于第二个数,则继续相加

    反之,则放弃前面的数字,与后面的数字相加,以此类推

     1 package 数组和;
     2 import java.util.Scanner;
     3 public class A {
     4     public static int getMax(int arr[]){//定义一个函数求数组中最大子数组和
     5         int maxSum=arr[0];
     6         int temp=0;//用来存储连续子数组的和
     7         for(int i=0;i<arr.length;i++)
     8         {
     9             if(temp<0)
    10             {
    11                 temp=arr[i];//当子数组的和为负数时直接抛弃并把当前数字赋给它
    12                 if(temp>0&&maxSum<temp )//当temp小于0后出现第一个大于0的temp时且大于原来的maxsum赋值
    13                 {maxSum=temp;}//一开始没写该语句当输入1,-2,4的时候输出1出现逻辑错误
    14             }
    15             else
    16             {
    17                 temp+=arr[i];//如果连续数字和为正则继续加下去
    18                 if(maxSum<temp)
    19                 {
    20                     maxSum=temp;//当现有连续数字和大于之前最大连续数字和时更新最大值
    21                 }
    22             }
    23         }
    24         return maxSum;
    25     }
    26     public static int max(int arr[]){
    27         int max=arr[0];
    28         for(int i=0;i<arr.length;i++)
    29         {
    30             if(max<arr[i])
    31             {
    32                 max=arr[i];
    33             }
    34         }
    35         return max;
    36     }
    37     public static void main(String[] args){
    38         int []array=new int[100];
    39         System.out.println("请输入要求解的数组个数:");
    40         @SuppressWarnings("resource")
    41         Scanner reader=new Scanner(System.in);
    42         int n=reader.nextInt();
    43         System.out.println("请输入要求解的数组:");
    44         int[] result=new int[array.length];
    45         for(int i=0;i<n;i++)
    46         {
    47             array[i]=reader.nextInt();
    48         }
    49         for(int i=0;i<array.length;i++)
    50         {
    51             int temp=array[0];
    52             for(int i1=0;i1<array.length-1;i1++)
    53                 {
    54                     array[i1]=array[i1+1];
    55                 }
    56             array[array.length-1]=temp;
    57             result[i]=getMax(array);
    58         }
    59         int r=max(result);
    60         System.out.println("最大子数组和为:"+r);
    61     }
    62 }

     总结:这道题比较难的就是理清思路

  • 相关阅读:
    代码里面的乱码
    11.并发包阻塞队列之LinkedBlockingQueue
    10.并发包阻塞队列之ArrayBlockingQueue
    9.并发包非阻塞队列ConcurrentLinkedQueue
    8.并发容器ConcurrentHashMap#put方法解析
    7.ReadWriteLock接口及其实现ReentrantReadWriteLock
    6.类似Object监视器方法的Condition接口
    5.Lock接口及其实现ReentrantLock
    【试验局】ReentrantLock中非公平锁与公平锁的性能测试
    【常用配置】Hadoop-2.6.5在Ubuntu14.04下的伪分布式配置
  • 原文地址:https://www.cnblogs.com/xueqiuxiang/p/12377294.html
Copyright © 2011-2022 走看看