简体   繁体   English

除了单个整数外,数组中的整数要么完全奇数,要么完全偶数。 检索此单个整数。 JS

[英]The integers in the array are either entirely odd or entirely even except for a single integer. Retrieve this single integer. JS

You are given an array (which will have a length of at least 3, but could be very large) containing integers.给你一个包含整数的数组(长度至少为 3,但可能非常大)。 The integers in the array are either entirely odd or entirely even except for a single integer N. Write a method that takes the array as an argument and returns N.除了单个整数 N 之外,数组中的整数要么完全奇数,要么完全偶数。编写一个将数组作为参数并返回 N 的方法。

For example: [2, 4, 0, 100, 4, 11, 2602, 36] Should return: 11例如:[2, 4, 0, 100, 4, 11, 2602, 36] 应该返回:11

My test cases that need to work:我需要工作的测试用例:

Test.assertEquals(findOutlier([0, 1, 2]), 1)
Test.assertEquals(findOutlier([1, 2, 3]), 2)
Test.assertEquals(findOutlier([2,6,8,10,3]), 3)
Test.assertEquals(findOutlier([0,0,3,0,0]), 3)
Test.assertEquals(findOutlier([1,1,0,1,1]), 0)

My code so far, that doesn't seem to work:到目前为止,我的代码似乎不起作用:

function findOutlier(integers){
    var evens = [];
    var odds = [];
    for (var i = 0; i < integers.length; i++) {
        if (integers[i] % 2) {
            evens.push(integers[i]);
        } else {
            odds.push(integers[i]);
        }
    }
    var elen = evens.length;
    var olen = odds.length

    if (elen > olen) {
        return odds;
    } else {
        return evens;
    }
}

What do I need to change with this code please?请问我需要用这个代码改变什么?

I see 2 possible modification : 1) Return the single value in your array and not all the array我看到 2 个可能的修改:1)返回数组中的单个值,而不是所有数组

return evens[0];

Change your if to check if the modulo == 0 ( if the remainder = 0 it is an even number)更改您的 if 以检查模数 == 0 (如果余数 = 0 它是偶数)

if ((integers[i] % 2) == 0) 

- -

function findOutlier(integers){
   var evens = [];
   var odds = [];
   for (var i = 0; i < integers.length; i++) 
   {
       if ((integers[i] % 2) == 0) 
       {
           evens.push(integers[i]);
       } 
       else 
       {
           odds.push(integers[i]);
       }
   }
   var elen = evens.length;
   var olen = odds.length;

   if (elen > olen)
   {
       return odds[0];
   } 
   else 
   {
       return evens[0];
   }
}

First, your condition should be:首先,您的条件应该是:

if (integers[i] % 2 === 0) {

and you need to return the first element of the array:并且您需要返回数组的第一个元素:

return odds[0];

Here's how I might approach it:以下是我可能会采用的方法:

 function findOutlier(arr) { const result = arr.reduce(function(p, c) { p[c % 2 === 0 ? 'even' : 'odd'].push(c); return p; }, { odd: [], even: []}); const eLen = result.even.length; const oLen = result.odd.length; if (oLen < eLen) { return oLen > 1 ? result.odd : result.odd[0]; } else { return eLen > 1 ? result.even : result.even[0]; }; } console.log(findOutlier([2, 4, 0, 100, 4, 11, 2602, 36]))

I had spare time... and I did this, javascript is very funny it could be nice to get another view.我有空闲时间......我做到了,javascript 非常有趣,如果能获得另一个视图可能会很好。

var numbers = [2,4,6,8,10,12,14,16,17,18,20];

function findOutlier(arr) {
    var odds = arr.filter(function (number) {
    return !!(number % 2)
  });

  var evens = arr.filter(function (number) {
    return !(number % 2)
  });

  var result = (odds.length < evens.length) ? odds.pop() : evens.pop();

  return result;
}

findOutlier(numbers);

I found an approach that uses O(1) memory.我找到了一种使用 O(1) 内存的方法。 No additional arrays are generated.不会生成额外的数组。 It checks how many of the first 3 values are even.它检查前 3 个值中有多少是偶数。 If that number is 2 or more, it looks for an odd value.如果该数字为 2 或更多,则它会查找奇数。 Else, it looks for an even value.否则,它会寻找一个偶数。

 function findOutlier(arr) { //Big O: memory = 1, time = n; let evenCount = 0; for(let i = 0; i < 3; i++) { let val = arr[i]; if(val % 2 === 0) evenCount ++; } let isEven = evenCount > 1; for (let i = 0; i < arr.length; i++) { if((arr[i] % 2 === 0) !== isEven) return arr[i]; //Check to see if number is opposite of even counts boolean } return new Error('Array contains no outlier.'); }

function findOne(arr){
   let evenOrOdd = {"even": [], "odd": []};

   for(let i=0; i<arr.length; i++) {
      let oddCount = evenOrOdd["odd"].length,
          evenCount = evenOrOdd["even"].length;

      if(oddCount===1 && evenCount>1 || evenCount===1 && oddCount>1) {
          break;
      }

      arr[i]%2===1 ?
        evenOrOdd["odd"].push(arr[i]) :
        evenOrdOdd["even"].push(arr[i]);
   });

   return evenOrOdd["odd"].length===1 ? 
            evenOrOdd["odd"][0] :
            evenOrOdd["even"][0];         
}

Python version of finding an even or odd number in an array containing multiple even or odd numbers with one being either of them.在包含多个偶数或奇数的数组中查找偶数或奇数的 Python 版本,其中一个是其中一个。 eg: [2,78,1004,13] = 13, [111,81,79,4,10023] = 4.例如:[2,78,1004,13] = 13,[111,81,79,4,10023] = 4。

def find_outlier(integers):
    lst_odd = [] # makin new odd list
    lst_even = [] # making new even list
    for i in integers:
     # checking if these numbers are even or odd.
        if i % 2 == 0 :
             # if even they will be added in this list otherwise only one is added.
            lst_even.append(i) 
        else:
     # if odd, they are added here, otherwise, only one is added
            lst_odd.append(i)

    #checking if whether these two list contains only one element.  if so we return that element.
    if len(lst_odd) == 1:
        return lst_odd[0]
    else:
        return lst_even[0]
    

check the first 3 numbers, if two of them are the same, return the outlier:检查前 3 个数字,如果其中两个相同,则返回异常值:

function findOutlier(integers){
  //your code here

  if (integers[0]%2 === 0 && integers[1]%2 === 0 ) {
      return integers.find(integer => integer %2 !== 0)
 } else if(integers[0]%2 !== 0 && integers[1]%2 !== 0) {
      return integers.find(integer => integer % 2 === 0)
 } else {
      if(integers[2]%2 === 0){
          return integers.find(integer => integer %2 !==0)
      }
      else {
          return  integers.find(integer => integer %2 ===0)
      }
}
int find(List integers) {
  List odd = [];
  List even = [];
  
  integers.forEach((number) {
    if (number % 2 == 0) even.add(number);
    else odd.add(number);
  });
  
  if (even.length < odd.length) return even[0];
  return odd[0];

}
function findOutlier(integers) {
    //your code here
    integers.sort();
    var count = 0;
    for (var i = 0; i < 3; i++) {
        if (integers[i] % 2 === 0) {
            count += 1;
        }
    }
    if (count >= 2) {
        var r = integers.filter(function(x) {
            return x % 2 !== 0;
        });
    } else {
        var r = integers.filter(function(x) {
            return x % 2 === 0;
        });
    }

    return r[0];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 per_page 不是整数类型。 Woocommerce REST API Node.js - per_page is not type of integer. Woocommerce REST API Node.js 最长正整数的子数组。 编译器没有意义 - sub array of longest positive integer. Compiler doesn't make sense 缓冲区为整数。 无法理解这一行代码 - Buffer to integer. Having trouble understanding this line of code 继续获取 TimeoutOverflowWarning 数字不适合 32 位有符号整数。 超时持续时间设置为 1 - Keep getting TimeoutOverflowWarning number does not fit into a 32-bit signed integer. Timeout duration was set to 1 我完全不知道为什么要打印 integer。 我完全被踩到了 - I absolutely have no clue why it's printing an integer. I am absolutely stomped 编写一个 function 接收一个整数数组和一个“偶数”或“奇数”的字符串 - Write a function that takes in an array of integers, and a string that will be either 'even' or 'odd' 在JS中拆分数组的不同integer元素中的单个字符串元素 - split single string element of array in different integer elements of array in JS 如何从javascript中的数组中提取元素,然后使其成为全新的单元素数组? - How do I extract an element from an array in javascript and then make it an entirely new, single-element array?new 使用 javascript 的简单数组求和(单个整数) - Simple Array Sum using javascript (single integer) 使用Javascript在数组中查找单个整数 - Finding a Single Integer in an array using Javascript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM