zoukankan      html  css  js  c++  java
  • 课堂练习(返回一个环状一维整数数组中最大子数组的和)

    设计思路:

    (1)将循环数组拆为我们熟悉的以为数组

    (2)通过每个数组元素在数组中位置前移一位来实现环的拆分(array[i1]=array[i1+1])

    (3)在每次拆分后的数组中求出最大子数组和并记录到一个新的数组result【】中

    (4)求出result【】中的最大值r作为循环数组的最大值

    拆分后数组最大子数组喝的解决:

    (1)定义整数数组arr[i]

    (2)定义maxsum为最大子数组和并赋初值为arr[0]

    (3)定义一个中间变量temp由arr[0]计算子数组(连续的)的和当temp为负数时更新temp为                              

     当前arr[i]值当temp再次被赋值为正数(即temp为负值后遇到的第一个大于0的array[i])时如果该数值大于原来的maxsum则更新maxsum

    (4)如果temp>0且temp>maxsum更新maxsum

    (5)返回maxsum

    源代码:

    import java.util.Scanner; 
    public class GetMaxArraySum {
    	public static int getMax(int arr[]){//定义一个函数求数组中最大子数组和
    		int maxSum=arr[0];
    		int temp=0;//用来存储连续子数组的和
    		for(int i=0;i<arr.length;i++)
    		{
    			if(temp<0)
    			{
    				temp=arr[i];//当子数组的和为负数时直接抛弃并把当前数字赋给它
    				if(temp>0&&maxSum<temp )//当temp小于0后出现第一个大于0的temp时且大于原来的maxsum赋值
    				{maxSum=temp;}//一开始没写该语句当输入1,-2,4的时候输出1出现逻辑错误
    			}
    			else
    			{
    				temp+=arr[i];//如果连续数字和为正则继续加下去
    				if(maxSum<temp)
    				{
    					maxSum=temp;//当现有连续数字和大于之前最大连续数字和时更新最大值
    				}
    			}
    		}
    		return maxSum;
    	}
    	public static int max(int arr[]){
    		int max=arr[0];
    		for(int i=0;i<arr.length;i++)
    		{
    			if(max<arr[i])
    			{
    				max=arr[i];
    			}
    		}
    		return max;
    	}
    	public static void main(String[] args){
    		int []array=new int[100];
    		System.out.println("请输入要求解的数组个数:");
    		@SuppressWarnings("resource")
    		Scanner reader=new Scanner(System.in);
    		int n=reader.nextInt();
    		System.out.println("请输入要求解的数组:");
    		int[] result=new int[array.length];
    		for(int i=0;i<n;i++)
    		{
    			array[i]=reader.nextInt();
    		}
    		for(int i=0;i<array.length;i++)
    		{
    			int temp=array[0];
    			for(int i1=0;i1<array.length-1;i1++)
    				{
    					array[i1]=array[i1+1];
    				}
    			array[array.length-1]=temp;
    		    result[i]=getMax(array);
    		}
    		int r=max(result);
    		System.out.println("最大子数组和为:"+r);
    	}
    }
    

      结果截图:

                   

    结对情况:

    孙哲负责代码复审和代码测试,我(李营)程序分析,代码编程,刚开始的时候设计思路存在问题,后来经过讨论确定正确的思路,

    并最终解决问题。

    结对照片:

  • 相关阅读:
    阿里云 Linux Centos7下安装Tomcat8
    Centos7.5中安装JDK1.8环境变量配置
    JAVA中的抽象类和接口
    Struts2框架
    [机器学习]--逻辑回归总结
    matlab-使用技巧
    机器学习-一对多(多分类)代码实现(matlab)
    机器学习-反向传播算法(BP)代码实现(matlab)
    线性回归代码实现(matlab)
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/liying123/p/5383528.html
Copyright © 2011-2022 走看看