java - 查找奇偶校验异常值 CodeWars
问题描述
所以我决定去 codewars 来复习一下java,我有这个问题要解决:
给你一个包含整数的数组(长度至少为 3,但可能非常大)。数组要么完全由奇数组成,要么完全由偶数组成,除了单个整数 N。编写一个将数组作为参数并返回这个“异常值”N 的方法。
这是我的测试用例:
public class OutlierTest{
@Test
public void testExample() {
int[] exampleTest1 = {2,6,8,-10,3};
int[] exampleTest2 = {206847684,1056521,7,17,1901,21104421,7,1,35521,1,7781};
int[] exampleTest3 = {Integer.MAX_VALUE, 0, 1};
assertEquals(3, FindOutlier.find(exampleTest1));
assertEquals(206847684, FindOutlier.find(exampleTest2));
assertEquals(0, FindOutlier.find(exampleTest3));
}}
这是我用来解决问题的代码:
public class FindOutlier{
static int find(int[] integers){
int numerOfOdds = 0;
int numberOfEvens = 0;
int integerOutlier;
for(int i = 0; i < integers.length ;i++){
if ( integers[i]%2 == 0){
numberOfEvens++;
}else{
numerOfOdds++;
}
}
if ( numberOfEvens > numerOfOdds){
integerOutlier = 1;
}else{
integerOutlier = 0;
}
for(int i = 0; i < integers.length; i++){
if ((integers[i]%2) == integerOutlier){
return integers[i];
}
}
return 0;
}}
本质上,代码所做的是遍历数组以找到异常奇偶校验。然后再次循环以确定离群整数。这段代码通过了所有的测试用例。但是,当我尝试提交代码时,它告诉我它期待 -3 但得到了 0。
谁能帮我在这里找到我的逻辑错误?这有点令人沮丧,因为它没有告诉我它测试的数组是什么,所以我无法跟踪我的代码来查找故障。
请原谅我的拼写错误,如果他们的代码不是最有效的,我可能会使用 ArrayLists,但似乎 CodeWars 不允许使用 ArrayLists...
解决方案
好吧,你的数学有一个错误:-3 % 2 == -1
,所以当一个负奇数是异常值时,它会失败。将第二个循环更改为
for(int i = 0; i < integers.length; i++){
if (Math.abs(integers[i]%2) == integerOutlier){
return integers[i];
}
}
推荐阅读
- c# - 如何通过主要活动更改媒体播放器的音量
- android - 使用本机反应更改整个系统(移动)字体
- prolog - Prolog回溯位置
- css - 是否可以使边界半径的行为像 figma
- python - 是否可以像 Jupyter 一样“保存” Python 脚本的信息并运行单独的函数?
- spring-boot - 使用附加的“常量”条件限制 @SecondaryTable 查询
- bash - 如何使用 cloudinit 运行自定义安装命令/脚本
- c# - 出于某种原因,我的代码不应该在我的僵尸中产生,我不知道为什么
- python - 大于内存嵌入数据集的社区检测
- java - Java Swing - 滑块在与交互时抑制所有输入