對於我來說,剛剛著手**的新手,在演算法方面還是了解比較短淺,很多演算法名稱也從未聽說過。
很多知識都是通過在 leetcode 上做題,看題解了解的,雜湊表就是其中的一種。
第一次看到雜湊表這個名詞還是在 leetcode 上的一道《兩數之和》,當時我是在做陣列部分的題,在學習題解的時候突然了解到雜湊表這個名詞,然後就深入了解了一下,然後被雜湊表冗長的**迷惑住了。
第一反應就是這**怎麼這麼長!!!qaq
但是看到雜湊表的時間複雜度,確實還是比雙重 for 迴圈要小的多。
最近便到雜湊表專題了解了下雜湊表的用法。
下面是一些菜鳥**:編寫乙個演算法來判斷乙個數 n 是不是快樂數。
「快樂數」定義為:對於乙個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。
如果 n 是快樂數就返回 true ;不是,則返回 false 。
示例:(輸入:19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
int n)
;int sum;
while
(n !=1)
if(hash[sum]==0
)else
return false;
}return true;
}給定兩個字串 s 和 t,判斷它們是否是同構的。
如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。
所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。
示例 1:輸入: s = 「egg」, t = 「add」
輸出: true
示例 2:
輸入: s = 「foo」, t = 「bar」
輸出: false
示例 3:
輸入: s = 「*****」, t = 「title」
輸出: true
bool isisomorphic
(char
* s,
char
* t)
, hash2[
130]
=, len =
strlen
(s);
for(
int i =
0; i < len; i++)}
return true;
}
當然,在學習過程中也發現了雜湊表的問題,目前我接觸了雜湊表陣列,對於字串的時候,由於asnii 編碼只需要 128 位,所以建立陣列比較方便,但是在處理 int 型陣列的時候,負數和大資料成為了雜湊表陣列的問題,這就需要進一步的深入的學習更深層次的雜湊表了。
下面就是陣列的問題**:給定兩個陣列,編寫乙個函式來計算它們的交集。
示例 1:說明:輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]
1.輸出結果中每個元素出現的次數,應與元素在兩個陣列**現的次數一致。
2.我們可以不考慮輸出結果的順序。
int
*intersect
(int
* nums1,
int nums1size,
int* nums2,
int nums2size,
int* returnsize)
for(i =
0; i < nums2size; i++)}
*returnsize = k;
return nums1;
}else
for(i =
0; i < nums1size; i++)}
*returnsize = k;
return nums2;
}}
給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值 至多為 k。
示例 1:輸入: nums = [1,2,3,1], k = 3
輸出: true
示例 2:
輸入: nums = [1,0,1,1], k = 1
輸出: true
示例 3:
輸入: nums = [1,2,3,1,2,3], k = 2
輸出: false
bool containsnearbyduplicate
(int
* nums,
int numssize,
int k)
b++;}
else
if(hash[nums[i]]!=
0)} hash[nums[i]
]= i;}if
(k < min)
return true;
}
初遇設計模式
今天開始學設計模式了。用的是程杰老師寫的 大話設計模式 在網上搜了一下這位老師的資料,簡單的了解一下這位大牛。那麼什麼是設計模式?design pattern 設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。使用設計模式是為了可重用 讓 更容易...
1 初遇貪心
以題著手,先上題。題意大致為,n堆果子,每一次合併兩堆果子為一堆,消耗的體力等於兩堆果子的重量之和。直到經過 n 1 次合併之後,就只剩下一堆了,要求消耗體力最少。例如有 3堆果子,數目依次為 1,2,9。可以先將 1 2堆合併,新堆數目為3,耗費體力為3 接著,將新堆與原先的第三堆合併,又得到新的...
初遇C語言
壹 知識總結 第二章 c資料型別 1 int定義整數量 float定義單精度浮點數量 double定義雙精度浮點數量 char定義字元型量。2 讀程式都要從main 入口,然後從最上面順序往下讀 碰到迴圈做迴圈,碰到選擇做選擇 有且只有乙個main函式。3 注釋不可以巢狀,如int a 1,int ...