[英]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.