arrays - 为什么我在这里得到错误的输出?
问题描述
bool containsDuplicate(int* nums, int numsSize){
bool repeating=true;
bool nonrepeating=false;
for(int i=0;i<numsSize;i++){
for(int j=1;j<numsSize;j++){
if(nums[i]==nums[j]){
return repeating;
}else{
return nonrepeating;
}
}
}
return true;
}
给定一个整数数组 nums,如果任何值在数组中至少出现两次,则返回 true,如果每个元素都是不同的,则返回 false。这是我应该写一个布尔函数的问题。谁能告诉我应该做哪些更改在这段代码中做得到正确的输出?
解决方案
你有两个主要问题:
您比较显然总是相同的相同元素:
for(int i=0;i<numsSize;i++){
for(int j=1;j<numsSize;j++){
if(nums[i]==nums[j]){
您最终将访问i==1
并j==1
检测到错误匹配。
通常,所有对都由以下循环之一访问:
for(int i=0;i<numsSize;i++){
for(int j=i+1;j<numsSize;j++){
...
或者
for(int i=0;i<numsSize;i++){
for(int j=0;j<i;j++){
...
第二个问题是你过早地退出了你的函数。您可以在第一场比赛中返回。但是对于第一个不匹配的元素,您首先需要比较所有其他对。
bool containsDuplicate(int* nums, int numsSize)
{
for (int i=0; i<numsSize; i++) {
for(int j=i+1; j<numsSize; j++) {
if (nums[i]==nums[j]) {
return true;
}
}
}
return false;
}
推荐阅读
- r - 想要根据匹配的时间戳将一个数据帧中的某些行替换为另一个数据帧中的行(两个数据帧的时间戳都在相同的 tz 中)
- reactjs - onChange 没有为自定义子组件触发
- android - 如何在android中本地化地理编码器上的响应
- javascript - 如何在事件监听器上获取第一个 div 元素
- python - 使用图像散列比较文本填充的图像
- python - 生成用于连接到 Google Calendar API 的个人使用应用程序的持久令牌
- python - 如何禁用失败的 Metaflow 任务的自动重试?
- dependency-injection - Dagger:是否可以自动将子组件 getter 公开给兄弟子组件的范围?
- firebase - 从 Flutter Firebase 数据库中检索数据
- statistics - 如何处理新近度加权平均值和不同的样本量?