java分组统计问题

Python019

java分组统计问题,第1张

public class zhidao1 {

public static void main(String agrs[]) {

List priceList = new ArrayList()

priceList.add(new Price(1,2,3))

priceList.add(new Price(4,3,3))

priceList.add(new Price(2,5,4))

priceList.add(new Price(3,2,3))

priceList.add(new Price(3,2,3))

//printList(priceList)

Collections.sort(priceList)

//printList(priceList)

int id=0

((Price)priceList.get(0)).setPriceId(0)

for(int i=0i<priceList.size()-1i++){

if(( (Price)priceList.get(i)).compareTo( (Price)priceList.get(i+1) )!=0){

id++

}

((Price)priceList.get(i+1)).setPriceId(id)

}

printList(priceList)

}

public static void printList(List priceList) {

for(int i=0i<priceList.size()i++) {

Price price = (Price)priceList.get(i)

if(i!=0){

if( price.compareTo( (Price)priceList.get(i-1) )!=0){

System.out.println()

}

}

System.out.println("price1="+price.getPrice1()+

" price2="+price.getPrice2()+

" price3="+price.getPrice3()+

" priceId="+price.getPriceId()

)

}

System.out.println()

}

}

class Price implements Comparable{

private int priceId

private int price1

private int price2

private int price3

public Price(){}

public Price(int price1,int price2,int price3) {

this.price1 = price1

this.price2 = price2

this.price3 = price3

}

public int compare(Object arg0,Object arg1) {

Price p1 = (Price)arg0

Price p2 = (Price)arg1

if(p1.getPrice1() >p2.getPrice1())

return 1

else if(p1.getPrice1() <p2.getPrice1())

return -1

else{

if(p1.getPrice2() >p2.getPrice2())

return 1

else if(p1.getPrice2() <p2.getPrice2())

return -1

else{

if(p1.getPrice3() >p2.getPrice3())

return 1

else if(p1.getPrice3() <p2.getPrice3())

return -1

else

return 0

}

}

}

public int getPriceId() {

return priceId

}

public void setPriceId(int priceId) {

this.priceId = priceId

}

public int getPrice1() {

return price1

}

public void setPrice1(int price1) {

this.price1 = price1

}

public int getPrice2() {

return price2

}

public void setPrice2(int price2) {

this.price2 = price2

}

public int getPrice3() {

return price3

}

public void setPrice3(int price3) {

this.price3 = price3

}

@Override

public int compareTo(Object o) {

Price p = (Price)o

if(p.getPrice1()>price1)

return -1

else if(p.getPrice1()<price1)

return 1

else{

if(p.getPrice2()>price2)

return -1

else if(p.getPrice2()<price2)

return 1

else{

if(p.getPrice3()>price3)

return -1

else if(p.getPrice3()<price3)

return 1

else

return 0

}

}

}

}

//模拟一个序列

List<Double> doubles = new ArrayList<>()

doubles.add((double) 5)

doubles.add((double) 4)

doubles.add((double) 3)

doubles.add((double) 5)

doubles.add(2.2)

doubles.add((double) 4)

//定义两个记录的list,他们是同步的,一个记录值,一个记录出现次数

List<Double> star = new ArrayList<>()

List<Integer> number = new ArrayList<>()

//数字数量分组

for(double i : doubles){

    if(-1 != star.lastIndexOf(i)) {

        number.add(star.lastIndexOf(i), number.get(star.lastIndexOf(i))+1)

    }else {

        star.add(i)

        number.add(1)

    }

}

//打印出结果,得到的序列再根据需求进行处理

for(int i =0  i< star.size()  i++) {

    System.out.println("==========")

    System.out.println("star:"+star.get(i))

    System.out.println("number:"+number.get(i))

}

分组数为3,那么就是两个指针,划分的三个区域即为所求。

好久没做过OJ上的题目了,很水,小范围数据能过,有什么问题一起探讨。

/*

 * 你的是这个数据

  5 3

  1 2 3 4 5

 */

import java.util.Scanner

public class Main

{

    public static int N

    public static int[] array

    public static int P

    public static void main(String[] args)

    {

        Scanner scan=new Scanner(System.in)

        //N数组长度

        N=scan.nextInt()

        //P:集合数

        P=scan.nextInt()

        array=new int[N]

        for(int i=0i<Ni++)

        {

            array[i]=scan.nextInt()

        }

        //不好确定循环次数,用递归解决

        startDivide(0,P-1,"")

    }

    

    public static void startDivide(int start,int deep,String answer)

    {

        if(deep==-1)

        {

            //将剩余的输出

            for(int i=starti<Math.min(N-deep,array.length)i++)

            {

                answer+=" "+array[i]+" "

            }

            System.out.println(answer+"}")

        }

        else

        {

            //这步貌似有问题?

            if(!answer.equals(""))

            {

                answer+="}"

            }

            if(answer.equals("")||answer.charAt(answer.length()-1)=='}')

            {

                answer+="{"

            }

            for(int i=starti<N-deepi++)

            {

                answer+=" "+array[i]+" "

                startDivide(i+1, deep-1, answer)

                if(deep==0)

                    break

            }

        }

    }

}