在Highest and Lowest(codewars)方面需要帮助

时间:2017-09-14 14:40:01

标签: javascript

你好我在编码挑战中遇到了一个边缘案例:如果有人能提供帮助会很棒;

在这个小小的作业中,你会得到一串空格分隔的数字,并且必须返回最高和最低的数字。

示例:

highAndLow("1 2 3 4 5"); // return "5 1"
highAndLow("1 2 -3 4 5"); // return "5 -3"
highAndLow("1 9 3 4 -5"); // return "9 -5"

注意:

所有数字都是有效的Int32,无需验证它们。 输入字符串中始终至少有一个数字。 输出字符串必须是由一个空格分隔的两个数字,最高的数字是第一个。

这是我在Javascript中的代码:

function highAndLow(numbers){
  numbers2=numbers.split(' ');
  var highest =parseInt(numbers2[0]);
  var lowest =parseInt(numbers2[0]);
  if (numbers2.length==1) {
    return numbers;
  }
  else {
    for (i=0;i<numbers2.length;i++) {
      if (parseInt(numbers2[i])>highest) {
        highest = parseInt(numbers2[i]);
      }
      else if (parseInt(numbers2[i])<lowest) {
        lowest = parseInt(numbers2[i]);
      }
    }
  }
  return(highest + " " + lowest);
}

我可以通过17次测试,但我被困在预期的'42 42',因为我回到'42'这对我来说很困惑。任何帮助表示赞赏:]

4 个答案:

答案 0 :(得分:1)

我认为您应该添加<=>=而不是><,以便满足这两个条件

答案 1 :(得分:0)

您也可以通过对数组进行排序,然后从排序数组中选择第一个和最后一个元素来完成。

function highestAndLowest(nums) {
  let numbers = nums.split(' ');
  let sorted = numbers.sort(function (a, b) {
    return Number(a) - Number(b);
  });
  return sorted[0] + " " + sorted[sorted.length - 1];
}

https://jsbin.com/farapep/edit?js,console

这可以更快,具体取决于浏览器排序实现,数组大小以及数组的初始顺序。

答案 2 :(得分:0)

if (numbers2.length==1) {
  return numbers;
}

这意味着如果只是&#34; 42&#34;通过了,你回来&#34; 42&#34;。这不是必需的。只需删除它,它应该工作。我怎么写它:

function getMaxMin(numbers){
  numbers = numbers.split(" ");
  return Math.max(...numbers) +" "+ Math.min(...numbers);
}

或者你的代码有点美化:

function getMaxMin(numbers){
  var max,min;
  numbers = numbers.split(" ");
  for( var num of numbers ){
    if( !max || num > max ) max = num;
    if( !min || num < min ) min = num;
  }
  return max+" "+min;
}

答案 3 :(得分:-1)

让我们考虑以下示例:

highAndLow(“ 1 2 3 4 5”); //返回“ 5 1”

在调用带有参数(“ 1 2 3 4 5”)的highAndLow函数时,输出应为“ 5 1”。

所以我的函数接受参数。每个数字都是根据它们之间的间隔选择的(使用拆分方法)。我使用ParseInt来指定数据类型,因为var可以是任何东西(字符串/整数)。所使用的算法是非常基本的算法,它将第一个数字视为最大值,并将其与其余参数进行比较。如果max的值大于其自身的值,则更新max的值。最小值也使用相同的算法。 return语句旨在按示例中所述的特定方式获取值。

function highAndLow(numbers){
  num=numbers.split(' ');
  var max = parseInt(num[0]);
  var min = parseInt(num[0]);
  for (var i = 0; i <= num.length; i++) {
    if(parseInt(num[i]) > max){
      max = parseInt(num[i]);
    }
  }
  for (var i = 0; i <= num.length; i++) {
    if(parseInt(num[i]) < min){
      min = parseInt(num[i]);
    } 
 }
 return (max + " " + min);
}

您还可以使用内置方法min和max。我想不使用它们来解决这个问题。