欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C 語言:面試題17.04.消失的數字

程序员文章站 2022-07-01 23:18:51
...

完成于11.07

消失的數字

這次還是來自力扣的一個題目,寫法挺多的。依照舊曆,先貼個題目鏈接,讓大家熟悉下題目,順便挑戰下自己:點擊進入:消失的數字

題目描述

C 語言:面試題17.04.消失的數字

代碼來啦

1、這是我自己的想法:

C 語言:面試題17.04.消失的數字

/*我的想法就是,既然是一個遞增數組丟失了一個數字,那麼我創建一個遞增數組,但是沒有丟失數字,
只需要新的數組減去丟失數字數組得到的結果,不恰好就是我想要找回的消失的數字嗎?*/
int missingNumber(int* nums, int numsSize)
{
    int array[numsSize+1];//創建一個新的遞增數組
    int sum1=0;//讓新數組之和初始化為0
    for(int i =0;i<numsSize+1;i++)//因為消失了一位數字,因此新數組長度應該比舊數組長度+1
    {
        array[i]=i;//根據遞增規律,為新數組添加元素
        sum1=sum1+array[i];//將新數組元素之和求出
    }
    int sum2=0;//讓舊數組之和初始化為0
    for(int j=0;j<numsSize;j++)
    {
        sum2=sum2+nums[j];//將舊數組之和求出
    }
    return sum1-sum2;//返回兩者之差,就是我們要求的消失的數字
}
運行結果1️⃣:

C 語言:面試題17.04.消失的數字

2、這是一個較優解:

C 語言:面試題17.04.消失的數字

/*此處參考了別人的想法,然後自己總結得出的更優解
我創建一個新數組,長度為舊數組長度+,然後邊創建,邊讓新數組中元素全為0,
緊接著,因為原數組中元素從0開始遞增,因此我給新數組元素賦值1,而下標就是舊數組中的元素,
最後我只要比較新數組中哪個元素不等於1(等於0),就知道該元素對應下標就是消失的數字*/
int missingNumber(int* nums, int numsSize)
{
    int result=0;//初始化result為0
    int array[numsSize+1];//創建一個新數組,長度為舊數組長度+1
    for(int i = 0;i<numsSize+1;i++)//注意新數組長度應為舊數組長度+1
    {
        array[i]=0;//讓新數組中的每個元素都為0
    }
    for(int j =0;j<numsSize;j++)
    {
        int num=nums[j];//讓num等於舊數組中元素大小,用於下面新數組下標
        array[num]=1;//!!!最重要的一步,讓新數組中對應舊數組元素的下標的元素等於1
    }
    for(int k =0;k<numsSize+1;k++)//遍歷新數組
    {
        if(array[k]!=1)//如果新數組中某個元素不等於1(等於0),這個元素對應下標就是丟失的數字
        {
            result = k;//用result將下標傳出循環
        }
    }
    return result;//返回result結果,即為消失的數字
}
運行結果2️⃣:

C 語言:面試題17.04.消失的數字

寫在最後:

  • 其實很多題目不是語法上很難,而是邏輯很嚴密,有時候還需要我們對數學十分熟悉,遇到問題多畫圖,多舉例子嘗試,把邏輯理清楚就沒問題的!
  • 即使自己做出來了,也要去看看別人的題解,或許有更優解能讓你茅塞頓開!
相关标签: C/C++ c语言