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
}
}
}
}