C 語言:面試題17.04.消失的數字
程序员文章站
2022-07-01 23:18:51
...
完成于11.07
消失的數字
這次還是來自力扣的一個題目,寫法挺多的。依照舊曆,先貼個題目鏈接,讓大家熟悉下題目,順便挑戰下自己:點擊進入:消失的數字
題目描述
代碼來啦
1、這是我自己的想法:
/*我的想法就是,既然是一個遞增數組丟失了一個數字,那麼我創建一個遞增數組,但是沒有丟失數字,
只需要新的數組減去丟失數字數組得到的結果,不恰好就是我想要找回的消失的數字嗎?*/
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️⃣:
2、這是一個較優解:
/*此處參考了別人的想法,然後自己總結得出的更優解
我創建一個新數組,長度為舊數組長度+,然後邊創建,邊讓新數組中元素全為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️⃣:
寫在最後:
- 其實很多題目不是語法上很難,而是邏輯很嚴密,有時候還需要我們對數學十分熟悉,遇到問題多畫圖,多舉例子嘗試,把邏輯理清楚就沒問題的!
- 即使自己做出來了,也要去看看別人的題解,或許有更優解能讓你茅塞頓開!
上一篇: 截图小工具开发笔记
下一篇: WPF中TimeSpan的坑
推荐阅读