本篇文章總結了在做LeetCode題目645時遇到的問題,主要是可變長數組的初始化問題。
645. 錯誤的集合
題目類型
數組
做題總結
- 每一次遍歷可以同時做多件事情,例如本題在查找重復的時候也同時查找丟失,即for循環中是if-if-if類型,而不是if-elseif-else類型。
- 一套算法可能無法直接將題解出來,有是需要專門應對一些特殊情況,如本題中1缺失或n缺失導致算法找不到缺失值的情況。
- 使用變量定義數組容量時,不能同時進行初始化!!!想要定義一個數組用以統計每個數字出現的次數,這時就需要根據參數numsSize來決定數組容量,但使用
int counts[numsSize + 1] = { 0 };
時,系統報錯:error: variable-sized object may not be initialized
,即variable-sized數組可能不會被初始化!實際上聲明int counts[numsSize + 1];
並沒有問題,問題在於同時進行的初始化!這個問題屬於C語言規定吧,如果想要初始化,則必須在聲明之后進行。其實比較好的做法還是動態內存分配:
int *counts = (int *) malloc( (numsSize + 1) * sizeof(int) );
memset( counts, 0, (numsSize + 1)*sizeof(int) );