排序问题

来源:互联网 发布:江西工业工程学院知乎 编辑:程序博客网 时间:2024/05/29 19:04
给出一序列的正整数,数据之间用逗号分隔,将其按从小到排列,如果序列中存在连续的数,只取最小和最大值。例如,序列为
1,3,4,2,70,100,输出结果为1,4,70,100
思路:直接排序,然后判断有连续的数时,只取连续序列的首尾两个数
代码如下:
import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.PrintWriter;import java.io.IOException;import java.io.StreamTokenizer;import java.util.List;import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Main{    private Scanner cin;    private PrintWriter cout;    private static final boolean DEBUG = true;    private String line;    private void init()    {        try        {            if (DEBUG)            {                cin = new Scanner(new BufferedReader(new InputStreamReader(new FileInputStream("d:\\program\\intelj\\spoj\\src\\spoj.txt"))));            }            else            {                cin = new Scanner(new BufferedReader(new InputStreamReader(System.in)));            }            cout = new PrintWriter(System.out);        }        catch (IOException e)        {            e.printStackTrace();;        }    }    private boolean input()    {        if (!cin.hasNextLine()) return false;        line = cin.nextLine();        return true;    }    private void solve()    {        String[] str = line.split(",");        List<Integer> nums = new ArrayList<>();        for (int i = 0; i < str.length; i++)        {            if ("".compareTo(str[i].trim()) == 0) continue;            nums.add(Integer.parseInt(str[i]));        }        List<Integer> ans = new ArrayList<>();        Collections.sort(nums);        for (int i = 0; i < nums.size(); i++)        {            int j = i;            while (j + 1 < nums.size() && nums.get(j + 1) - nums.get(j) == 1) j++;            if (j != i)            {                ans.add(nums.get(i)); ans.add(nums.get(j));            }            else            {                ans.add(nums.get(i));            }            i = j;        }        for (int i = 0; i < ans.size(); i++)        {            if (i != 0) cout.print(" ");            cout.print(ans.get(i));        }        cout.println();        cout.flush();    }    public void run()    {        init();        while (input())        {            solve();        }    }    public static void main(String[] args)    {        new Main().run();    }}


0 0