题目描述
有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。
输入描述:
第一行输入一个整数(0≤N≤50)。
第二行输入N个升序排列的整数,输入用空格分隔的N个整数。
第三行输入想要进行插入的一个整数。
输出描述:
输出为一行,N+1个有序排列的整数。
解题思路:三种方法
1、插入到最后,然后通过sort排序再输出。
2、自己写排序,分三种情况:1)数组头部 2)数组尾部 3)数组中部
3、不储存在数组里面,有序数组在输出的时候进行判断,直接将给定的数在输出的时候显示,这时候控制好循环变量的自增就可以了。
参考思路:
参考代码:(第二种思路)
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String str=input.readLine();//读取第一行的个数number
int number = Integer.parseInt(str);
str=input.readLine();//读取第二行的数组
String[] values = str.split(" ");
str=input.readLine();//读取第三行要插入的数字value
int value = Integer.parseInt(str);
int[] sample = new int[number];
//sample是把字符串数组values转为int数组,也可以直接Integer.parseInt(values[0]),后面觉得可读性不强就改掉了
int[] arr = new int[number+1];
//arr是答案数组
for (int i = 0; i < number; i++) {//sample数组初始化
sample[i]=Integer.parseInt(values[i]);
}
if(value<=sample[0]){//第一个开头:如果value最小 放在最开头
arr[0]=value;
for (int j = 0; j < number; j++) {
arr[j+1]=sample[j];
}
}
else if(value>sample[number-1]){//第二个情况是结尾:如果value最大,先把sample的对应值给arr,再加入value
for (int j = 0; j < number; j++) {
arr[j]=sample[j];
}
arr[arr.length-1]=value;
}
else{//第三种情况如果在中间:当value大于左边小于右边的时候,插入数据
arr[0]=sample[0];
int index=1;//这里的index用来控制数组arr的下标,加入一个值后index自动加1,arr[index++]
for(int i=1;i<number;){//遍历循环给答案数组加入值
if(value<=sample[i]&&sample[i-1]<=value){
arr[index++]=value;
}
arr[index++]=sample[i];
i++;
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}还没有达到最好的时间复杂度!!!

京公网安备 11010502036488号