首页 > 试题广场 >

特殊排序

[编程题]特殊排序
  • 热度指数:41420 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一系列整数,将其中最大的数挑出(如果有多个,则挑出一个即可),并将剩下的数进行排序,如果无剩余的数,则输出-1。

输入描述:
输入第一行包括1个整数N,1<=N<=1000,代表输入数据的个数。
接下来的一行有N个整数。


输出描述:
可能有多组测试数据,对于每组数据,
第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。
第二行将排序的结果输出。
示例1

输入

4
1 3 4 2

输出

4
1 2 3
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;


public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        ArrayList<Integer> li = new ArrayList<>();
        int n = Integer.parseInt(br.readLine());
        String[] str = br.readLine().split(" ");
        int len = str.length;
        for (int i = 0; i < len; i++) {
            li.add(Integer.parseInt(str[i]));
        }
        li.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 > o2 ? 1 : -1;
            }
        });
        System.out.println(li.remove(li.size() - 1));
        if (!li.isEmpty()) {
            for (Integer i : li) {
                System.out.print(i + " ");
            }
        }
        else
            System.out.println(-1);

    }

}

发表于 2021-02-18 10:13:18 回复(0)
Java 解法
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) arr[i] = scanner.nextInt();
        Arrays.sort(arr);
        System.out.println(arr[n-1]);
        if (n>1) for (int i = 0; i < arr.length - 1; i++) System.out.print(arr[i]+" ");
        else System.out.println("-1");
    }
}


发表于 2020-03-18 11:01:53 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
    private static void quickSort(int a[],int left,int right)
    {
        int i=left;
        if(left>=right)
            return;
        int j=right;
        int temp=a[left];
        while(i!=j)
        {
            while(i<j&&a[j]>=temp) 
                j--;
            if(j>i)
                a[i]=a[j];
            while(i<j&&a[i]<=temp)
                i++;
            if(i<j)
                a[j]=a[i];
        }
        a[i]=temp;
        quickSort(a,left,i-1);
        quickSort(a,i+1,right);
    }
    public static void main(String[] args) throws IOException{
        BufferedReader reader= new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        if(n==1){
            System.out.println(reader.readLine());
            System.out.print(-1);
            return;
        }
        String[] line = reader.readLine().split(" ");
        
        
        int[] info = new int[n];
        for(int i = 0;i<n;i++){
            info[i] = Integer.parseInt(line[i]);
        }
        quickSort(info,0,n-1);
        System.out.println(info[n-1]);
        System.out.print(info[0]);
        for(int i = 1;i<n-1;i++){
            System.out.print(" "+info[i]);
        }
        
    }
}

发表于 2019-01-05 21:21:47 回复(0)
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            if(1 == n){
                System.out.println(sc.nextInt());
                System.out.println("-1");
                return;
            }
            int[] nums = new int[n];
            for(int i=0;i<n;i++){
                nums[i] = sc.nextInt();
            }
            Arrays.sort(nums);
            System.out.println(nums[n-1]);
            for(int i=0;i<n-1;i++){
                System.out.print(nums[i]+" ");
            }
        }
    }
}

发表于 2018-08-14 22:34:47 回复(0)

输入为1的时候注意输出数组元素data[0]

还要输出一个「-1」,才满足题意(也是无语吧),不过通过了就好了呢,不用管那么多,调试过程中发现这个「隐含要求」,希望以后牛客的题目要求能够写的尽量明确一些。

其他的就是基本操作了,写多了排序觉得类库真的很重要!

Java标准类库提供有static方法System.arraycopy(),用它复制数组比用for循环要快很多。这个方法针对所有类型都做了重载。

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int[] data = new int[n];
            for (int i = 0; i < data.length; i++) {
                data[i] = scan.nextInt();
            }
            if (n == 1) {
                System.out.println(data[0]);
                System.out.println(-1);
            } else {
                Arrays.sort(data);
                int[] output = new int[n - 1];
                System.arraycopy(data, 0, output, 0, n - 1);
                System.out.println(data[data.length - 1]);
                for (int i = 0; i < output.length - 1; i++) {
                    System.out.print(output[i] + " ");
                }
                System.out.println(output[output.length - 1]);
            }
        }
    }
}
编辑于 2018-05-29 11:11:27 回复(0)
import java.util.Scanner;
public class Main{
int data;
Main left;
Main right;
static int max,zcc1,zcc2;
int zcc;
public static void main(String[] args) {
String[]arr ;
Scanner input=new Scanner(System.in);
Main ma=null;
while(input.hasNext()){
String n=input.nextLine();
String str =input.nextLine();
arr= str.trim().split("\\s+");
              zcc2=arr.length;
ma =new Main(Integer.parseInt(arr[0]));
   ma.xxx(ma,arr);
   if(arr.length==1){
   max=Integer.parseInt(arr[0]);
   
   System.out.println(max);
   System.out.print(-1+"\n");
   }else{System.out.println(max);
   inOrder(ma);
   
   }
   zcc1=0;
                zcc2=0;
   max=0;
   ma=new Main(Integer.parseInt(arr[0]));
                
}}
public Main(int data) {
this.data=data;
left=null;
right=null;
this.zcc=0;
}
public void xxx(Main root,String[] arr){
for(int i=1;i<arr.length;i++){
insert(root,Integer.parseInt(arr[i]));
}
}
public void insert(Main root,int data){
if(max<data){
max=data;
if(max<root.data){
max=root.data;
}
}
 if(data>root.data)                               
 { 
  if(root.right==null){
   root.right = new Main(data);
  
   //System.out.println(root.data);
  }else{
   this.insert(root.right, data);
  }
 }else if(data<root.data){                                      
  if(root.left==null){
 
   root.left = new Main(data);
   //System.out.println(root.data);
  }else{
   this.insert(root.left, data);
  }
 }
 else if(data==root.data){
 //System.out.println(zcc);
root. zcc++;
 }
 }
public static void inOrder(Main root){     //中根遍历

 if(root!=null){
  inOrder(root.left);
  if(root.data!=max){
                zcc1++;
  if(zcc1==zcc2-1){System.out.print(root.data+"\n");}
  else{System.out.print(root.data+" ");}
           }
  for (int i = 0; i < root.zcc; i++){
               zcc1++;
  if(zcc1==zcc2-1){System.out.print(root.data+"\n");}
  else{System.out.print(root.data+" ");}
}
  inOrder(root.right);
 }
}
}
二叉树的中序遍历。。看评论才知道输出最后一个整数后面接换行符,接空格根本不能通过
发表于 2017-04-16 23:01:17 回复(0)

问题信息

难度:
6条回答 11258浏览

热门推荐

通过挑战的用户

查看代码