Замена элемента в почти отсортированном массиве элементом из другого массива - PullRequest
0 голосов
/ 02 августа 2020

Мой первый массив почти отсортирован. Мне нужно заменить несортированный элемент максимально возможным элементом из второго массива. Неправильно расположенный элемент не будет находиться в индексе 0 или n-1. И если array1 [i] меньше, чем array1 [i-1], то индекс i является неправильным индексом.

Например: первый вход 5 первый массив: 2 7 8 6 13 второй вход 4 второй массив 15 11 9 5 Мой результат будет 11

, однако, если нет возможного элемента, который я мог бы взять из второго массива, печать будет невозможна. например: 14 15 16 17 или если в нем 0 элементов.

Как исправить этот код?

   int n1 = s.nextInt();
   int[] array1 = new int[n1];
   for (int i = 0; i < n1; i++) {
       array1[i] = s.nextInt();
   }
   
   int n2 = s.nextInt();
   int[] array2 = new int[n2];
   for (int i = 0; i < n2; i++) {
       array2[i] = s.nextInt();
   }
  
   
    int temp1=0;
    int temp2=0;
 
    
    for(int i=0; i < array1.length-1;i++) {
       if (array1[i] > array1[i+1]) {
           temp1=array1[i+1];
           temp2=array1[i+2];
           break;
       }
       
   }
   
int temp3 = 0;
   for(int j=0; j<=array2.length-1;j++) {
       if(array2[j] > temp1 && array2[j] < temp2){
           temp3 = array2[j];
           break;
       }
   }
   System.out.println(temp3);

   }

}

1 Ответ

2 голосов
/ 02 августа 2020

Выполнение некоторых изменений в вашем коде, как показано ниже, это сработало для тестовых случаев, упомянутых в проблеме выше ...

1. Предположим, что значение с индексом i + 1 нарушает отсортированный порядок, тогда вы должны взять temp1 = i и temp2 = i + 2.

2. Найдите максимальное значение в array2, которое находится между temp1 и temp2. ​​

// "static void main" must be defined in a public class.
public class Main {
    public static void main(String[] args) {
      
   Scanner s = new Scanner(System.in);      
        
   int n1 = s.nextInt();
   s.nextLine();
   int[] array1 = new int[n1];
   for (int i = 0; i < n1; i++) 
       array1[i] = s.nextInt();
   s.nextLine();
   
   int n2 = s.nextInt();
   s.nextLine();
   int[] array2 = new int[n2];
   for (int i = 0; i < n2; i++) 
       array2[i] = s.nextInt();
   s.nextLine();
  
   
    int temp1=0;
    int temp2=0;
 
    
    for(int i=0; i < array1.length-1;i++) 
       if (array1[i] > array1[i+1]){ 
           temp1=array1[i];
           temp2=array1[i+2];
       }   

   
   int temp3 = -1;
   for(int j=0; j<array2.length-1;j++) 
       if(array2[j] > temp1 && array2[j] < temp2)
           if(array2[j]>temp3)
               temp3 = array2[j];

    if(temp3 == -1)
        System.out.println("Not Possible\n");
    else
        System.out.println(temp3);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...