看到昨天同学拼多多的笔试题,今天试着写了写,因为自己并没有参加过笔试,写出来的只是我自己能想到的测试用例都过了的,如果有错误,欢迎各位大神指出,仅仅是提供一个解题的想法。而且因为自己基本功不够,写出的程序基本事件复杂度都比较高,也欢迎大神提出优化改进的方法。
- 给定两个数组A和B。其中数组A是几乎严格升序排列的,几乎的定义是只需改变其中一个数,即可满足完全升序排列。
你的任务是从数组A中找到这个数字,并从数组B中选取一个数将其替换,使得数组A是完全严格升序排列的。(严 格升序排列,即不允许相邻两个为相同的数)
请找出数组B中满足要求的最大数字,并输出最终有序的数组。如果不存在就输出NO.
输入描述:
共两行,第一行是数组A,第二行是数组B,元素之间用空格分隔(数组A的长度,数组B的长度< 100)
输出描述:
共一行,为最终有序的数组。不存在则输出NO
示例1
输入
1 3 7 4 10
2 1 5 8 9
输出:
1 3 7 9 0
输入:
20 1 23
50 26 7
输出:
NO
解题思路:这个的解题思路的重点在于改变A[index]和A[index-1]都有可能组成一个升序数组,其中index是定位到的A[index]<A[index-1]的位置。有一点值得注意,改变A[index]如果有值的话肯定会大于A[index-1],只有在A[index]没有符合要求值的情况才会考虑A[index-1],可以减少时间。
import java.util.Scanner;
public class First {
public static void main(String ars[]){
Scanner scanner=new Scanner(System.in);
int[] arrA = parseInts(scanner.nextLine().split(" "));
int[] arrB = parseInts(scanner.nextLine().split(" "));
int res[]=changeToSort(arrA,arrB);
if(res==null){
System.out.println("No");
}else{
for(int r:res){
System.out.print(r+" ");
}
}
}
public static int[] changeToSort(int A[],int B[]){
if(A==null||B==null||A.length==0||B.length==0