结队开发-最大子数组

要求:

  对于任意一个整数数组,找出最大和的字数组。要求时间复杂度为O(n)。

设计思路:

  数字类型 负数,零,正数,那么最大子数组

  1.所有正数/(正数+零)

  2.最小的负数

  主代码:

package 课堂测试N;
//编译调试技巧  用一句System是否执行到该句
//方法变量命名    类首字母大写 方法首字母小写其余大写 变量所有小写 常量大写
//tab间做间隔   4个空格
//多条件判断加括号
//每个大括号担起一行
//对重点加注释,不用在语法上进行注释

public class KTACE {

    static int l=0;
    static List list = new List();
    public static void main(String[] args){
        boolean flag0=false;
        
        int A[] ={-5,2,0,-9,-1};
        
        for(int i=0;i<A.length;i++)
        {
            if(A[i]>=0)
                {
                l++;
                flag0=true;//只要有正数就调用非负数数方法
                }
        }
        if(flag0==true)
            {
            int b[]=maxszz(A,l);
            System.out.print("最大子数组");
            for(int len=0;len<b.length;len++)
                System.out.print(b[len]+" ");
            }
        else 
            maxszf(A);
    }

    //找最大
    public static int Largest(int List[],int length)
    {    
        boolean flag=true;
        
        if(length==0)
        {
        System.out.print("数组长度为 ");
        flag=false;
        return 0;//return的位置可以是后面不用进行
        }
        
        else
        {
        int  i,max=List[0];//max不能设置为0,若是负数就不可一返回该数字
        int num=0;
        
        
        for(int m=0;m<length;m++)
        {
            if(List[m]==0)
                num++;
        }
        
        if(length!=0&&num==length)
        {
            System.out.print("数组未赋值");
            flag=false;
        }
        if(flag==true)
        {
        for(i=0;i<length;i++)
        {
            if(List[i]>=max)
            {max=List[i];}
        }
        }
        return max;
        }
        }
    //有非负数的最大数组
    public static int[] maxszz(int a[],int l)
    {
        int b[] =new int[l];
        for(int i=0;i<a.length;i++)
        {
            if(a[i]>=0)
                list.insert(a[i]);
        }
        for(int j=0;j<l;j++)
        {
            b[j]=Integer.parseInt(String.valueOf(list.head.next.data));
            list.head=list.head.next;
        }
        /*System.out.print("最大数组元素");
        for(int mm=0;mm<b.length;mm++)
        {
            System.out.print(b[mm]+" ");
        }
        System.out.println(" ");*/
        return b;
    }
    //全为负数的最大数组
    public static int[] maxszf(int a[])
    {
        int b[] =new int[1];
        int k=a[0];
        for(int i=0;i<a.length;i++)
        {
            if(a[i]>k)
                {
                    k=a[i];
                    break;
                }
        }
        System.out.println("最大数组元素"+k);
        return b;
    }
    
    }

  链表 Node:

  

package 课堂测试N;

import java.util.Random;

public class Node {
    int data;
    Node next;
    public Node(int data2, Node node) {
        this.data = data2;
        this.next = node;
    }

}

  链表 List:

package 课堂测试N;
public class List {
    Node head;
    int size;

    public List() {
        head = new Node(0, null);
        size = 0;
    }

    public Node getLast() {
        Node node = head;
        while(node.next != null) {
            node = node.next;
        }
        return node;
    }

    public int insert(int  data) {
        Node last = getLast();
        Node node = new Node(data, null);
        last.next = node;
        size ++;
        return 1;
    }

    public void display() {
        System.out.println("size = " + size + "");
        Node temp = head.next;
        while(temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.next;
        }
        System.out.println();
    }
}

 

运算截图:

  

 

posted @ 2017-03-21 08:20  陶雨洁  阅读(225)  评论(0编辑  收藏  举报