给出一序列的正整数,数据之间用逗号分隔,将其按从小到排列,如果序列中存在连续的数,只取最小和最大值。例如,序列为
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(); } }