Leetcode 紀錄 for C 語言
- 思路是
- 從第 1 個開始與第 2 ~ N 加看看
- 找到符合 target 的答案就 return
- 沒有的話就用下一個,直到 N - 1 為止
- 思路是
- 用一個指標去紀錄開頭
- 另一個指標去做回傳結構體目前的位置
- l1 + l2 + 前一次的進位
- 只留下加減值的個位數存入
- 加減值除十獲得進位值給下一次使用
- 若有進位就在多加一位數
- 思路是
- 如果輸入字串小於等於一的話,回傳 0 或 1
- 從第一個開始看,如果遇到重複的字元結束,並計算該次的非重複字串長
- 往下一個再做一次,若比目前最長的長則更新
- 直到每個字串都被做過為止
- 最後回傳最長的
- 思路是
- 時間複雜度為 O(nums1Size + nums2Size),所以只能用一個 for
- 一個個讀入放入陣列中,相當於做排序的過程,其規則如下:
3. nums1 跟 nums2 都有內容,則拿小的進去陣列
4. nums1 沒有了就放 nums2,反之亦然
- 最後算中位數
- ps. 整個程式的時間複雜度有要求,所以就不在陣列組成的過程中去做運算後回傳,因為時間複雜度會變小。
- 思路是
- 先找出第一個非空白的字元
- 計算符號數量
- 檢查是不是數字
- 計算數字
- 檢查是不是有超出邊界
- 記得把負號放回去
- 思路是
- 成對的括號,數量一定是偶數
- ASCII 的符號會差一或差二,調整為全部差一
- 計算差值是否等於數量除二
- 如果數量是奇數或是差值不等於數量除二的話就回傳 False,反之回傳 True
- 用 Stack 去做先進後出
- 思路是
- Null 檢查
- 把兩個接再一起
- 氣泡排序整個
- 思路是
- 檢查 NULL
- 交換左右樹 Pointer
- 利用遞迴做下一層的交換至結束
- 思路是
- 檢查 t & s 長度是否一致
- 計數 a-z 每個字母總和是否為 0
- 思路是
- 如果 nums 等於左邊回傳左邊的 index,等於右邊回傳右邊的 index
- 介於中間回傳 -1
- 思路是
- 如果 p 等於 q 則回傳任一
- 如果 p 跟 q 位於 root 的兩側,則回傳 root
- 如果 root 等於 p 則回傳 p,等於 q 則回傳 q
- root 比 p, q 大的話往左找,反之往右找
- 思路是
- 先保留字母跟數字
- 從頭跟尾比,一樣就繼續比,不一樣就回傳 False
- 思路是
- 走訪如果走了 10001 個點後看到 NULL,代表沒有 loop
- 思路是
- 判斷樹根是否為 NULL,是的話為平衡樹
- 計算左右子樹各別的深度
- 若深度差小於二且子樹也是平衡樹的話回傳 True,反之為 False
- 思路是
- 從版本 1 到 n 中間開始找
- 如果 mid 為 true,則右邊更新為壞的,為 false,則最後好的為 mid,因此將 left 更新為 mid + 1
- 最後回傳 left 就可以了
- 思路是
- 空的直接回傳
- 其餘的做字串串接後回傳,直到全部結束為止
- 思路是
- add they after bin to dex
- dex to bin after added
- 思路是
- 記住當前的 Address 與 Next 的 Address
- Next 設定為前一個的 Address
- 思路是
- Boyer–Moore majority vote algorithm(摩爾投票算法)
- 先記住第一開始投票結果
- 如果投的是不一樣的則減一,反之加一
- 當 cnt == 0 時,且投票結果不同時,則更換投票結果
void DFS(int** image, int x, int y, int old, int new, int r, int c)
{
if (image[x][y] == old) {
image[x][y] = new;
if(x > 0)
DFS(image, x - 1, y, old, new, r, c);
if(x < r - 1)
DFS(image, x + 1, y, old, new, r, c);
if(y > 0)
DFS(image, x, y - 1, old, new, r, c);
if(y < c - 1)
DFS(image, x, y + 1, old, new, r, c);
}
}
int** floodFill(int** image, int imageSize, int* imageColSize, int sr, int sc, int color, int* returnSize, int** returnColumnSizes){
*returnSize = imageSize;
*returnColumnSizes = imageColSize;
if(image[sr][sc] == color)
return image;
DFS(image, sr, sc, image[sr][sc], color, imageSize, *imageColSize);
return image;
}
- 思路是
- 如果新顏色跟舊顏色一樣就不用改了
- 修改該位置的顏色
- 看看它的上下左右一個位置的點是不是原本也是同顏色,如果是的話,就改顏色
- 往周圍擴張到沒有為止
- 思路是
- 總共只有 26 個字母
- 如果該字母出現在 ransomNote 中,就減一
- 如果該字母出現在 magazine 中,就加一
- 最後看每個字母的數量,如果為負表示 ransomNote 中的某個字母數量比 magazine 中多,則回傳 False
- 思路是
- 每次只能走 1 or 2 步
- 所以 n 是 1或2 時,只有 1 或 1+1、2 = 2 兩種
- n = 3 開始是 (n - 2) 走兩步 跟 (n - 1) 走一步 的和
- 回傳最終點的走法
- 思路是
- 計數所有的字元數量
- 如果是偶數數量就全部保留
- 如果是奇數數量就留 N - 1 個,且記錄有奇數出現
- 最後回傳被留下的數量 + 是否有奇數出現
- 思路是
- 紀錄最小的股票價格
- 當下賣掉的價格賺的比之前多的話,紀錄該賺的價值
- 最後回傳最大價值
- 思路是
- 首先先將 Max 設為 0
- 如果當前的數字比先前的總和 + 當前數字大,那就從當前數字開始重新計算
- 記住過程中最大的總和並回傳
- 思路是
- ListNode Len 為 1 或 2 時,會抓到 Arr 中相對的位置,但後面結尾會錯
- 紀錄每個 ListNode 的 pointer 到 Arr 中,然後回傳數量/2的 Arr 位置
- 思路是
- Input 是已經 Sort 過的 Array
- Input 最小是 -100
- 如果目前的數字跟前一個不同的話,更新數字,且將數字填入陣列
- 過程中計數有多少個不同的數字
- 思路是
- 建立 Hash Table
- 設定 Hash Table Size
- 如果目前的時間比 前一次 + 10 大就回傳 True,並且更新時間
- 反之則回傳 False
- 思路是
- 一個位數一個位數的移動
- 如果下一個數值添加進去會超過 INT 上限的話,回傳 0
- 思路是
- 一個位元一個位元的移動
- 移完 32 個位元後回傳
- 思路是
- 紀錄兩個 array 中出現了那些數字
- 如果兩的都有共同數字的話,就紀錄該數字
- 最後回傳數量跟陣列
- 思路是
- 只有一個 0 可以反轉
- 只要結尾不為 0 反轉就一定一樣長
- 思路是
- 找到最右末的節點,然後開始往回加
- root val = curr max + right val
- left val = curr max + left val
- 思路是:
- 找出最短長度
- 然後用最短長度開始做滑動視窗
- 找出相輔的內文後回傳
- 思路是如果是負數的頂的話,除完會是最大值(Connor case)
- 之後直接除(但這樣不符合條件,因為不能用 long、除法、乘法、取餘數)
- 思路是:
- 從最末位開始計算,每十進位,最後看有沒有進位決定要回傳第零個還是第一個
- 思路是:
- 如果該節點是空的就回傳 0
- 一路找到最深的左右子樹合後記錄最大的
- 思路是:
- 用 hash table 去紀錄 1 ~ n 有哪些出現過
- 在把缺的找出來
- 思路是:
- 頭尾都是一
- 每多一層就多一個
- 中間的數值是上一層的鄰近兩個的和
- 回傳陣列
- 思路是:
- 從第二個開始都是前兩個的和
- 因為該提是 DP 所以用這樣子算 - sol 1
- 可以用遞迴 - sol 2
- 思路是:
- 找反轉的字串回傳函數一個
- 如果都沒找到就回傳空 “”
- 思路是:
- 掃過去,如果是 aeiou 就跳過不複製
- 思路是:
- 一個節點一個節點的比
- 不同就回傳 false
- 相同就 true
- 思路是
- 計算相信的,如果都相信就回傳
- 如果沒有都相信就 -1
- 思路是:
- 奇數一定最後一個 bit 為一
- 剩下的一補前面
- 思路是:
- 因為只會有一個字元不一樣,所以算出兩字串差回傳即可
- 思路是:
- 找出 root 介於 p q 之間的 root
- 從新的 root 開始算到 p q 個別的長度相加
- 思路是:
- 如果有比較大的就往後移,然後取代
- 回傳第三大的
- 思路是:
- 長度一定是 n - 1
- 然後兩個兩個進行 OR 運算即可
- 思路是
1. 用空白隔開
2. 印出最後一個字串長度
- 思路是
- 計算左右子樹總和,並且給予左右邊不同的權重
- 比較總和後,相等為鏡像樹
- 思路是
- 如果下一個跟當前的一樣,把當前的下一個改為下下個
- 若改完之後,還是一樣就重複 1
- 若不同就在往後做
ex.