首页 > 其他分享 >每日记录(十四)2023.03.06

每日记录(十四)2023.03.06

时间:2023-03-06 19:33:19浏览次数:38  
标签:06 Scanner int sum 2023.03 数组 input new 十四

一、题目要求

1、输入一个整形数组,数组里有正数也有负数。
2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3、求所有子数组的和的最大值。要求时间复杂度为O(n)

import java.util.Scanner;

public class SecondTest {

public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入数组长度:");
int n=input.nextInt();

int [] list = new int [n];
System.out.println("请输入数组内的数字:");
for(int i=0;i<n;i++)
{
int num=input.nextInt();
list[i]=num;
}
int max=Integer.MIN_VALUE;
int sum=0;
for(int i=0;i<n;i++) {
if(list[i]>0) {
sum+=list[i];

max=sum;
}
else {
sum=0;
}

}
System.out.println("最大和是:"+max);

}
}

 

 

扩展

若将原数组首尾相连改为环状数组,求其最大子数组的和解决方案如下:

1、通过用户输入数组容量,随机产生一个整型数组

2、遍历数组中的所有元素,保证让其每个元素都作为一次首节点,将其前面的元素拼到原数组最后使其成为一个新数组

3、对每个新数组求一次最大子数组

4、将所有最大子数组的值比较大小,输出最大值

import java.util.ArrayList;
import java.util.Scanner;

public class FirstTest {
    
    public static int getResult(ArrayList<Integer> array) {
        int sum = 0;
        int result = array.get(0);
        for (Integer integer : array) {
            if(sum<=0)
                sum = integer;
            else
                sum += integer;
            
            if(sum>result)
                result = sum;
        }
        return result;
    }
    
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int num=input.nextInt();
        int array[]=new int[num];
        ArrayList<Integer> result = new ArrayList<>();
        
        for(int i=0;i<num;i++)
        {
            if((int)(Math.random()*2)==0)
            {
                array[i]=(int)(Math.random()*10);
            }
            else
            {
                array[i]=-(int)(Math.random()*10);
            }
        }
        for(int i=0;i<num;i++) {
            System.out.println(array[i]);
        }
        
        
        for(int i=0;i<num;i++) {
            ArrayList<Integer> list = new ArrayList<>();
            for(int j=i;j<num;j++) {
                list.add(array[j]);
            }
            for(int k=0;k<i;k++) {
                list.add(array[k]);
            }
            result.add(getResult(list));
        }
        int max = result.get(0);
        for (Integer integer : result) {
            if(max<integer)
                max = integer;
        }
        
        System.out.println(max);
    }
    
    
}

标签:06,Scanner,int,sum,2023.03,数组,input,new,十四
From: https://www.cnblogs.com/xiao-hong111/p/17185086.html

相关文章

  • 190615小记-生活从不容易
    2019-06-15生活从不容易,这句话虽然略显俗气。换了工作已经是一个半月了,心态好像好了一些。一直想写些东西总结一下,可是思维很混乱,网站也是很久没有更新。没什么重点,......
  • 20230306
    68269AC0-B82A-34DF-63BD-8D0E38AA96513F9DA294-72DC-E2A5-4F4E-DCEE6D0BC7F8BB385073-2B96-3F78-13C9-D4CFA1985A47F5346E12-4637-48EB-D87F-176046A11A3593553B63-37......
  • 3月06日课后总结
    3/06课后总结异常捕获补充try:print(ekaskl) #不会执行exceptExceptionase:print(e) #name'ekaskl'isnotdefinedelse:print('没得问题') #els......
  • day06 打卡242.有效的字母异位词 349. 两个数组的交集 202. 快乐数
    day06打卡242.有效的字母异位词349.两个数组的交集202.快乐数242.有效的字母异位词242题目链接1.思路:可以先记住s的每个字符,如果出现就+1;再次循环t的每一个字符,寻......
  • C++学生成绩管理系统[2023-03-06]
    C++学生成绩管理系统[2023-03-06]C++课程设计说明参与专业信息和数学专业所有学生时间安排完成需求分析、类设计以及代码的实现答辩注意:答辩未过的需要参加下届C++......
  • C/C++飞机订票系统[2023-03-06]
    C/C++飞机订票系统[2023-03-06]三、飞机订票系统1.某公司每天有10航班(航班号、价格),每个航班的飞机,共有80个坐位,分20排,每排4个位子。编号为A,B,C,D·如座位号:10D......
  • C/C++课程设计题目[2023-03-06]
    C/C++课程设计题目[2023-03-06]课题1:公司考勤管理系统(一)、课程设计题目:某公司的考勤管理系统(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2......
  • 算法随想Day31【贪心算法】| LC860-柠檬水找零、LC406-根据身高重建队列、LC452-用最
    LC860.柠檬水找零boollemonadeChange(vector<int>&bills){intC5=0,C10=0;for(inti=0;i<bills.size();++i){if(bills[i]==5......
  • 每日记录(十三)2023.03.05
    Handler和消息处理上节中提到,不同线程间如何通信,Handler就是一个易用的方案。如果把各个线程比作各干各活的工人,Handler就像是个中间人,负责把各个工人传来的消息进行处理,......
  • Day06-1.maven
    day06-maven今日重点1.安装maven,并在idea中关联maven,创建maven项目(掌握)2.mybatis入门(必须完成)3.mybatis核心配置文件(掌握)一、maven概述1.1、项目开发中的问题......