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

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

本文关键字:整数 单个 JS 检索 数组      更新时间:2023-09-26

给你一个包含整数的数组(长度至少为3,但可能非常大)。数组中的整数要么是完全奇数的,要么是完全偶数的,除了单个整数 N.编写一个将数组作为参数并返回 N 的方法。

例如:[2, 4, 0, 100, 4, 11, 2602, 36]应返回:11

我需要工作的测试用例:

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)

到目前为止,我的代码似乎不起作用:

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;
    }
}

请问我需要用这个代码改变什么?

我看到 2 种可能的修改:1)返回数组中的单个值,而不是所有数组

return evens[0];

更改 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];
   }
}

我有空闲时间...我这样做了,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);

首先,您的条件应该是:

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

并且您需要返回数组的第一个元素:

return odds[0];

以下是我可能如何处理它的方法:

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]))

我找到了一种使用 O(1) 内存的方法。不会生成其他数组。它检查前 3 个值中有多少是偶数。如果该数字为 2 或更大,则查找奇数值。否则,它会查找偶数值。

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];         
}

检查前 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];
}

Python 版本,在包含多个偶数或奇数的数组中查找偶数或奇数,其中一个是其中任何一个。 例如:[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]
    
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];
}