理解得到数组中的第二低和第二高值

时间:2016-01-27 12:25:05

标签: javascript arrays if-statement

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语句。这个解决方案似乎还有很长的路要走。

谢谢!

3 个答案:

答案 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]);

        }

            }
        }