数组中的整数要么是完全奇数的,要么是完全偶数的,除了单个整数.检索此单个整数..JS
The integers in the array are either entirely odd or entirely even except for a single integer. Retrieve this single integer. JS
给你一个包含整数的数组(长度至少为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];
}
相关文章:
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 是否可以禁用jquery中的单个单选按钮
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- 使用jquery选中/取消选中单个复选框
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何在Chartjs中制作整数比例
- 单个页面上有多个标记表单
- 在 Webix 中显示单个整数
- 数组中的整数要么是完全奇数的,要么是完全偶数的,除了单个整数.检索此单个整数..JS
- JSON HTTP响应-获取单个整数
- 将整数和字符串连接到单个字符串
- 递归算法,用于替换整数列表中单个给定整数的每个实例
- 如何按单个整数字段对JSON进行排序
- 将双字节整数转换为单个字节- javascript