【问题标题】:Why am I getting wrong output here? [closed]为什么我在这里得到错误的输出? [关闭]
【发布时间】:2021-11-12 23:00:37
【问题描述】:
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。这是我应该为这个问题编写一个布尔函数的问题。谁能告诉我什么我应该在此代码中进行更改以获得正确的输出吗?

【问题讨论】:

  • 如果i==j会发生什么?
  • @mkrieger1 但基本逻辑似乎正确..即遍历两个循环并比较数组的两个元素?
  • 这个逻辑甚至不接近正确。在第一次比较之后立即返回一个值。
  • 对于一个好的问题,请同时提供输入数据、输出和预期输出。
  • 请选择一个可以帮助其他人解决相同问题的标题,因为 SO 是问题和答案的存储库,而不是个人帮助台。谢谢

标签: arrays c boolean


【解决方案1】:

你有两个主要问题:

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

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;
}

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多