- packagecom.eshore.sweetop.cupidity;
- importjava.util.ArrayList;
- importjava.util.List;
- publicclassQuest{
- Qt[]qt={newQt(4,70),newQt(2,60),newQt(4,50),newQt(3,40),
- newQt(1,30),newQt(4,20),newQt(6,10)};
- //复杂度n^2
- publicvoidgreey(){
- Qt[]q=newQt[qt.length];
- List<Qt>list=newArrayList<Qt>();
- for(inti=0;i<q.length;i++){
- intj=0;
- for(j=qt[i].delay-1;j>=0;j--){
- if(q[j]==null){
- q[j]=qt[i];
- break;
- }
- }
- if(j<0){
- list.add(qt[i]);
- }
- }
- for(inti=0;i<q.length;i++){
- if(q[i]!=null)
- System.out.println(q[i]);
- }
- for(Qtqt:list){
- System.out.println(qt);
- }
- }
- classMListextendsArrayList<Qt>{
- intmax=0;
- @Override
- publicbooleanadd(Qto){
- super.add(o);
- if(o.delay>max){
- max=o.delay;
- }
- returntrue;
- }
- }
- //想了好久才想出的复杂度n的算法
- publicvoidgreey2(){
- MListml=newMList();
- MListml2=newMList();
- for(inti=0;i<qt.length;i++){
- if(!(qt[i].delay<=ml.max&&ml.max<ml.size()+1)){
- ml.add(qt[i]);
- }else{
- ml2.add(qt[i]);
- }
- }
- Qt[]qt2=newQt[ml.size()];
- for(inti=0;i<ml.size();i++){
- qt2[i]=ml.get(i);
- }
- Qt[]q=sort(qt2,10);
- for(inti=0;i<q.length;i++){
- System.out.println(q[i]);
- }
- for(inti=0;i<ml2.size();i++){
- System.out.println(ml2.get(i));
- }
- }
- publicQt[]sort(Qta[],intk){
- Qt[]b=newQt[a.length];
- //100是基数,可以处理100以下的排序,根据实际情况调整
- int[]c=newint[k];
- for(inti=0;i<a.length;i++){
- c[a[i].delay]=c[a[i].delay]+1;
- }
- for(inti=1;i<c.length;i++){
- c[i]=c[i]+c[i-1];
- }
- for(inti=b.length-1;i>-1;i--){
- b[c[a[i].delay]-1]=a[i];
- c[a[i].delay]=c[a[i].delay]-1;
- }
- returnb;
- }
- publicstaticvoidmain(String[]args){
- Questq=newQuest();
- //q.greey();
- q.greey2();
- }
- }
- classQt{
- staticintcount=1;
- finalintid=count++;
- intdelay;
- intwaste;
- Qt(intdelay,intwaste){
- this.delay=delay;
- this.waste=waste;
- }
- publicStringtoString(){
- return"{id="+id+",delay="+delay+",waste="+waste+"}";
- }
- }