你好我在编码挑战中遇到了一个边缘案例:如果有人能提供帮助会很棒;
在这个小小的作业中,你会得到一串空格分隔的数字,并且必须返回最高和最低的数字。
示例:
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'这对我来说很困惑。任何帮助表示赞赏:]
答案 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。我想不使用它们来解决这个问题。