首页 > 其他分享 >数组

数组

时间:2023-02-25 14:57:18浏览次数:36  
标签:int System num 数组 new out

1.返回一个数组中最大子数组的和

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

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

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

思路:另设两个数组,一个记录和b[],一个记录当前子数组的个数c[]。如果原数组的第二个数加上第一个数的和小于第二个数,那么舍弃第一个数,当前子数组的个数为一。由此类推,直到遍历完所有数组。

package test;

import java.util.Random;import java.util.Scanner;

 

public class array_test {

        public static void main(String[] args) {

            Scanner scanner=new Scanner(System.in);

            int[] num=new int[20];

            int number=0;

            int[] array1=new int[20];

            int a=scanner.nextInt();

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

                //随机生成数组里的数字

                array1[i]=scanner.nextInt();

            }

            num[0]=array1[0];

            for (int i = 1; i < array1.length; i++) {

                if(array1[i]+array1[i-1]>array1[i]) {

                    num[i]=num[i-1]+array1[i];

                    number=i+1;

                }

                else {

                    num[i]=array1[i];

                }

            }

            int max=num[0];

            for(int i=1;i<num.length;i++) {

                System.out.print(num[i]);

                if(num[i]>max)

                    max=num[i];

            }

            System.out.print(max);

            System.out.print("  ");

    }

}

 

 

2.求一个循环数组中最大子数组的和

要求:在第一问的前提下,将原数组变为循环数组

思路:将原数组循环赋值,直到子数组的个数大于原数组的个数时停止

import java.util.Random;import java.util.Scanner;

 

public class huan {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int a[]=new int[10000];

        int b[]=new int[20000];

        int sum,d,temp1=0,temp2=0,flag1=0,flag2=0;  //分别记录子数列的起始和结束位置

        System.out.print("请输入数组元素的个数: ");

        Scanner sc=new Scanner(System.in);

        int m=sc.nextInt();

        if(m>999999)

        {

            System.out.print("请重新输入数组元素的个数: ");

            m=sc.nextInt();

        }

        Random rand = new Random();

        for(int i=0;i<m;i++)//循环为数组赋值        {

            a[i] = rand.nextInt(40)-20;

            b[i] = a[i];

            b[i+m]=a[i];

            System.out.print(a[i]+" ");

        }

        sum=b[0];

        d=sum;

        for(int i=0;i<2*m;i++)//核心循环,来判断怎么产生最大子数组        {

            if(d<=0){

                d=0;

                temp1=i+1;

                temp2=i;

            }        

            d+=b[i+1];

            temp2++;

            if(d>sum){

                sum=d;

                flag1=temp1;

                flag2=temp2;

                if((flag2-flag1+1)>=m)

                {

                    break;

                }

            }

        }

        System.out.println("");

        System.out.print("子数组的组成元素为:    ");

        for(int i=flag1;i<=flag2;i++)

            System.out.print(b[i]+" ");

        System.out.println("");

        System.out.println("子数组和的最大值为:    "+sum);

    }

 

}

 

 

 

3.要求数组从文件中读取

要求:数组从文件中读取

           如果输入的数组过大,考虑一下数的溢出

           保证文件中错误的参数不能导致程序的崩溃

package test;

import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;

public class array_test2 {

    public static void main(String[] args) throws IOException {

        FileReader fileReader=new FileReader("C:\\Users\\admin\\Desktop\\QQ\\test.txt");

        BufferedReader bReader=new BufferedReader(fileReader);

        StringBuffer stringBuffer=new StringBuffer();

        String[] strings=new String[50];

        String bb;

        String s="";

 

        while((bb=bReader.readLine())!=null) {

 

            s=s+bb;

        }

        String [] data=s.split(" ");

        int [] datas=new int [data.length];

        //将String类型数组转成int类型

        for(int j=0;j<data.length;j++)

        {

        datas[j]=Integer.parseInt(data[j]);

        }

        

        for(int i=0;i<datas.length;i++)

        {

        System.out.print(datas[i]+"   ");

        }

        

        int[] num=new int[50];

        num[0]=datas[0];

        int number=0;

        for(int i=1;i<datas.length;i++) {

            if(datas[i]+datas[i-1]>datas[i]) {

                num[i]=datas[i]+num[i-1];

                number=number+1;

            }

            else {

                num[i]=datas[i];

            }

        }

        int max=num[0];

        for(int i=1;i<datas.length;i++) {

            System.out.print(num[i]+"  ");

            if(num[i]>max)

                max=num[i];

        }

        System.out.print(max+"  ");

        System.out.print(number);

    }

}

     

标签:int,System,num,数组,new,out
From: https://www.cnblogs.com/wass/p/17154410.html

相关文章

  • C++-4 数组
                   ......
  • C语言旋转数组-转圈打印数组
    //旋转数组voidrotateArray(size_trows,size_tcols,size_tarr[4][4]){size_trotated[rows][cols];for(size_ti=0;i<rows;i++){for(size......
  • for in (var key in Obj)遍历JS对象/数组
    这个方法还可以遍历数组,就放在一起写了。letresult=function(obj){for(letkeyinobj){returnfalse;//若不为空,可遍历,返回false}returntrue;}conso......
  • 一维字符数组的操作
    键盘获取字符数组scanf和%s获取字符串,遇到空格或回车,结束输入gets函数获取带空格的字符串(不推荐使用)gets函数可以获取带空格的字符串,但是不会获取......
  • java202302java学习笔记第十一天-二维数组2
     ......
  • Lua字节数组与float互转
    纪念那些在双流工厂奋斗的日夜,防爆表屏项目是一次很成功的实践,包括设计的页面堆栈和跳转机制历史回退机制页面密码保护机制 串口分包机制,运用综合所学来搭建的屏上独......
  • linux shell编程中的数组
     001、普通数组普通数组的定义: ay=(100200300"aa""bb")##直接定义 [root@PC1test]#ay2[0]=800##单独定义每一个元素[root@PC......
  • 一维字符数组
    一维字符数组初始化逐个元素初始化(不推荐)例如:chararr[5]={'h','e','l','l','o'};以字符串的方式初始化(推荐)例如:chararr[6]="hello"......
  • 数组元素移除问题的总结和延伸
    本文对使用和操作数组时常遇到的一类数组元素移除问题的高效解决方法(O(N))做一总结,并对其中用到的思想做一些总结和延伸。本文以leetcode中的三道算法题为例进行说明。无序......
  • #yyds干货盘点# LeetCode面试题:删除有序数组中的重复项
    1.简述:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不......