数列有序!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 104575 Accepted Submission(s): 43675
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3 1 2 4 0 0
做法很多,我这里用的归并,时间复杂度为O(n+m),由于m始终为1,所以最终时间复杂度O(n)。
import java.util.Scanner; public class Main { public static int[] merge(int[] a,int[] b) { int[] c = new int[a.length+b.length]; int i = 0; int j = 0; int k = 0; while(i < a.length && j < b.length) { if(a[i] <= b[j]) { c[k++] = a[i++]; } else { c[k++] = b[j++]; } } if(i == a.length) { while(j < b.length) { c[k++] = b[j++]; } } else if(j == b.length) { while(i < a.length) { c[k++] = a[i++]; } } return c; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); while(sc.hasNext()) { int n = sc.nextInt(); int m = sc.nextInt(); if(n == 0 && m == 0) { break; } int[] a = new int[n]; int[] b = new int[1]; for(int i = 0;i < n;i++) { a[i] = sc.nextInt(); } b[0] = m; int c[] = merge(a, b); for(int i = 0;i < c.length;i++) { if(i == c.length-1) { System.out.print(c[i]); break; } System.out.print(c[i]+" "); } System.out.println(); } } }