需要在给定的两个排序数组中找到前3个最小数字。我认为两个数组应首先合并为一个并对其进行排序以获取前3个最小的数字。任何人都可以帮助我合并和排序部分或提供一些建议,任何帮助将不胜感激。
这是我现在到达的地方,我只能得到最小的数字(不是前3,只有一个)。
public class MergeandSort {
public static void main(String[] args) {
int[] set1 = {1,2,6,9,18};
int[] set2 = {2,3,7,10,21,30};
int smallest = set1[0];
int smallests = set2[0];
for(int i=0; i < set1.length; i++){
if(set1[i] < smallest)
smallest = set1[i];
}
for(int k=0; k < set2.length; k++){
if(set2[k] < smallests)
smallests = set2[k];
}
System.out.println("Smallest Number in Set 1 is : " + smallest);
System.out.println("Smallest Number in Set 2 is : " + smallests);
}
}
答案 0 :(得分:4)
数组已经排序,所以你不必遍历整个数组就能找到3个最小的数字。
这里有一些伪代码可以帮助您入门:
int i = 0;
int j = 0;
int c = 0;
int[] lowest3 = new int[3];
while (true) {
find the smaller of set1[i] and set2[j] and put it in lowest3[c]
if set1[i] is smaller, increment i
otherwise increment j
increment c
if (c==3) // you are done
break;
}
the lowest3 array now contains the 3 lowest numbers of both arrays
当然你可以用任何k交换3。您只需确保i始终小于set1.length
且j始终小于set2.length
。
答案 1 :(得分:1)
如果数组已经排序,只需实现合并排序的合并技术和限制条件,它应该只运行k次(在本例中为3),但不要忘记检查集合的大小是否小于k或不!
int k = 0,i = 0,j = 0;
while (k<3 && k<set1.length && k<set2.length )
{
if (set1[i] <= set2[j])
{
final_set[k] = set1[i];
i++;
}
else
{
final_set[k] = set2[j];
j++;
}
k++;
}
while (k<3 && k<set1.length) {
final_set[k]=set1[i];
k++;
i++;
}
while (k<3 && k<set2.length) {
final_set[k]=set1[j];
k++;
j++;
}
答案 2 :(得分:0)
这不会起作用:
Array1 = {1,3,5}
Array2 = {2,3,4}
正确的解决方案:{1,2,3}
解决方案的输出:{1,3,4}
答案 3 :(得分:0)
public class MergeandSort {
public static void main(String[] args) {
int[] set1 = {1,2,6,9,18};
int[] set2 = {2,3,7,10,21,30};
int[] sorted = new int[k];
int smallest = set1[0];
int smallests = set2[0];
int i = 0, j = 0, c = 0;
while(i < set1.length && j < set2.length && c < k){
if (set1[i] < set2[j])
sorted[c++] = arr1[i++];
else
sorted[c++] = arr2[j++];
while (i < set1.length && c < k)
sorted[c++] = arr1[i++];
while (j < set2.length && c < k)
sorted[c++] = arr2[j++];
System.out.println(sorted);
}
}
其中 k 是您想要的已排序数字的计数