Stack-ers的好日子,
我必须请你原谅我之前是否提出这个问题,或者它是否是基本的(我只是一个Javascript新手)。
I have been doing w3c js challenges lately: 编写一个JavaScript函数,它将存储一组数字并找到第二个最低和第二个最大数字。
以下是我的回答:
var array = [3,8,5,6,5,7,1,9];
var outputArray = [];
function arrayTrim() {
var sortedArray = array.sort();
outputArray.push(sortedArray[1],array[array.length-2]);
return outputArray;
}
arrayTrim();
以下是他们提供的答案:
function Second_Greatest_Lowest(arr_num) {
arr_num.sort(function(x,y) {
return x-y;
});
var uniqa = [arr_num[0]];
var result = [];
for(var j=1; j < arr_num.length; j++) {
if(arr_num[j-1] !== arr_num[j]) {
uniqa.push(arr_num[j]);
}
}
result.push(uniqa[1],uniqa[uniqa.length-2]);
return result.join(',');
}
alert(Second_Greatest_Lowest([1,2,3,4,5]));
我知道for循环一直运行到输入的长度,但是我不理解嵌套在for循环中的if语句。这个解决方案似乎还有很长的路要走。
谢谢!
答案 0 :(得分:3)
你的答案对f.e等输入的执行不正确。 [3,8,5,6,5,7,1,1,9]
。您提出的解决方案会在此处返回1
作为第二个最低的数字 - 而实际上应该是3
。
网站建议的解决方案考虑到了这一点 - 这就是循环中的if
,它检查当前的数字是否与前一个相同。如果是这种情况,它会被忽略。这样,每个数字都会出现一次,而这反过来又允许盲目地从排序的数组中挑出第二个元素,实际上它是第二个最低的数字。
解决方案似乎还有很长的路要走
你选择了捷径,它没有正确处理所有边缘情况; - )
答案 1 :(得分:2)
有问题的循环:
for(var j=1; j < arr_num.length; j++) {
if(arr_num[j-1] !== arr_num[j]) {
uniqa.push(arr_num[j]);
}
}
通过使用(合理)描述性变量名称提供一些关于它正在做什么的线索:uniqa
- 或&#34;唯一数组&#34;。 if
语句检查当前元素是否与前一个元素不同 - 最初对数组进行了排序,这可以为您提供一个唯一的数组 - 只需填充一个新数组(如果该元素确实是唯一的)。 / p>
此后逻辑与你的逻辑相同。
答案 2 :(得分:1)
import java.util.Arrays;
public class BubbleWithMax_N_Min
{
public static void main(String[] agrs)
{
int temp;
int[] array = new int[5];
array[0] = 3;
array[1] = 99;
array[2] = 55;
array[3] = 2;
array[4] = 1;
System.out.println("the given array is:" + Arrays.toString(array));
for (int i = 0; i < array.length; i++)
{
System.out.println(array[i] + "");
}
for (int i = 0; i < array.length; i++)
{
for (int j = 1; j < array.length - i; j++)
{
if (array[j - 1] > array[j])
{
temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
System.out.println(" 2nd Min and 2nd Highest:");
for (int i = 0; i < 1; i++)
{
System.out.println(array[i+1]);
}
for (int i = 0; i < 1; i++)
{
int a= array.length-2;
System.out.println(array[a]);
}
}
}