首页 > 解决方案 > 为什么我在这里得到错误的输出?

问题描述

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。这是我应该写一个布尔函数的问题。谁能告诉我应该做哪些更改在这段代码中做得到正确的输出?

标签: arrayscboolean

解决方案


你有两个主要问题:

您比较显然总是相同的相同元素:

for(int i=0;i<numsSize;i++){
    for(int j=1;j<numsSize;j++){
        if(nums[i]==nums[j]){

您最终将访问i==1j==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;
}

推荐阅读