英文:
Replacing element in an almost sorted array with an element from another array
问题
我的第一个数组几乎已经排序好了。我需要用第二个数组中可能的最大元素替换未排序的元素。错误放置的元素不会在第0个或第n-1个索引上。如果array1[i]小于array1[i-1],那么索引i是错误的索引。
例如:
第一个输入 5
第一个数组:2 7 8 6 13
第二个输入 4
第二个数组 15 11 9 5
我的结果将是 11
但是,如果没有可能从第二个数组中取得的元素,它将打印 "not possible",例如: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);
英文:
My first array is almost sorted. I need to replace the unsorted element with the max possible element from the second array. The wrongly placed element would not be on the 0th or n-1 index. And if array1[i] is less than array1[i-1], then index i is the wrong index.
For ex:
first input 5
first array: 2 7 8 6 13
second input 4
second array 15 11 9 5
My result would be 11
however, If there is no possible element I could take from the second array, it would print not possible. for instance : 14 15 16 17 or if it has 0 element.
How can I fix this code?
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
对于你提供的代码,我将只翻译注释和注释中的文本。以下是翻译后的代码部分:
// "static void main" 必须在一个公共类中定义。
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;
// 执行一些更改,如下所示,对于上述问题中提到的测试用例有效...
// 1. 假设索引 i+1 处的值违反了排序顺序,则应取 temp1 = i 和 temp2 = i+2。
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;
// 2. 找到在 temp1 和 temp2 之间的数组2中的最大值。
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("不可能\n");
else
System.out.println(temp3);
}
}
请注意,我只翻译了注释和注释中的文本,而没有翻译代码本身。
英文:
Performing Some changes in your code as shown below, it worked for the test cases mentioned in the problem above...
1. Suppose the value at index i+1 violates the sorted order then you should take temp1 = i and temp2 = i+2.
2. Find the maximum value in array2 which lies between temp1 and 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);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论