2024年10月5日 星期六

[4] Median of Two Sorted Arrays

ㄟ......忽略題目要求,暴力法解之 XD

2024年10月3日 星期四

[1249] Minimum Remove to Make Valid Parentheses

嗯...先寫了初版後~本來想要寫精進版本的~
沒想到 ...(?)
就先這樣吧QQ

2024年9月28日 星期六

2024年9月13日 星期五

[1310] XOR Queries of a Subarray

用heap搜尋出來的題目,寫完覺得跟heap 一點關係也沒有,才發現它只是今天的daily所以放在搜尋回應的第一排  XD

2024年8月13日 星期二

[1019] Next Greater Node In Linked List

的確是用了stack ! 的確是要存index 再去寫到return array !
不過雙重轉換的部分果然是搞砸了  XD

2024年8月11日 星期日

[394] Decode String

唉~(先嘆一口長氣)
之前有看到這題,但後來覺得麻煩就沒寫 XD
沒想到面試被考這題,而我陷入panic XD 好丟臉啊~(遮臉)
反正就這樣吧Orz 

2024年8月6日 星期二

[1441] Build an Array With Stack Operations

寫了一個初版覺得充滿贅步?! XD 放在最後面~

2024年8月4日 星期日

[950] Reveal Cards In Increasing Order

看起來是一個可以用index 硬幹的題目(?)
數學不好真的很吃虧(牽拖)還想說用recursive 來寫(!)
搞個return array 就快史惹bar  XD 

2024年8月1日 星期四

[1609] Even Odd Tree

這個queue的寫法跟我想像的好像不一樣ㄟ哈哈哈哈哈!(乾笑)
先貼一下out of memory的版本 XD 之後再來改可以過的版本吧QQ (更新在後面)

2024年7月31日 星期三

[1171] Remove Zero Sum Consecutive Nodes from Linked List

好像是不需要用一個array 出來存linked list 的value (嗎)
一邊遍歷linked list 可以一邊算presum (嗎)
假設都已經要先跑一次求出總node數了 (嗎)
總之Orz 先這樣吧給你一個TBD XD

2024年7月30日 星期二

[1669] Merge In Between Linked Lists

好像也不是什麼有意思的題目(thinking 圖)
前人可能測資比較親民所以速度都很快
貼過來用也跟我的一樣慢XD 沒有成就感,無趣XP

2024年7月27日 星期六

[561] Array Partition

好吧這就是一題賺題數的........
一個array 要兩兩int 一組, 取小的相加, 要找加完的最大值!!!
腦袋漿糊的看了hint , 意思就是,因為要取小的加,又要求最後的最大值,
所以就直接sort 下去從小到大兩兩一組,這樣大的值才會在pair 的時候被留下來!

[3217] Delete Nodes From Linked List Present in Array

喔?!竟然是有點無痛的寫完XD 怎麼會呢!(嚇到自己)
莫非我要成為linked list 之神了嗎~(漫畫單手在下巴揮手圖:還早還早~)

2024年7月25日 星期四

[1367] Linked List in Binary Tree (TBD)

感覺有點tricky的題目?!(thinking圖)
不太確定自己能不能寫出來
但是已經看解答了,那就先來個TBD吧XD 

[1754] Largest Merge Of Two Strings

想要練習一下字串處理,結果想的太難了!!!
毫笨!!!

2024年7月24日 星期三

[1013] Partition Array Into Three Parts With Equal Sum

覺得寫的有點醜Orz 以為有什麼厲害的解法但好像還好?!
不LIKE, 不想多研究Orz 下一題!

[2487] Remove Nodes From Linked List

偷吃步先來一下
用stack 存完int 結果再重新assign 回linked list,後面的當做不存在XD

2024年7月13日 星期六

[706] Design HashMap

好吧這是一個偷吃步(thinking 圖)

[713] Subarray Product Less Than K

嗯,很好,我發現我還是不會sliding window!(大哭)

[1328] Break a Palindrome

沒天份代表在此~(體操選手上場前被唱名是單手高舉微點頭貌)

[382] Linked List Random Node

微妙的題目(thinking 圖)
取random之前到底要不要下seed 呢? XD

2024年7月12日 星期五

[1046] Last Stone Weight

暖身題,piece of cake. (真是大言不慚XD)

2024年7月3日 星期三

[1971] Find if Path Exists in Graph

偷吃步 a.k.a 先偷看解答的寫法!原來有一種東西叫做union find Orz
leetcode 不管寫幾題,總是有新的東西呢T.T

2024年7月2日 星期二

[210] Course Schedule II

哇~~這種題目,真的很靠背捏!!!

2024年6月30日 星期日

[39] Combination Sum

本來想用dp的算有幾種來延伸,發現是一場災難Orz
原來要用backtracking,然後原來backtracking 的template 就是tree的traversal時使用的DFS啊啊啊啊啊(倒退十五步)
發現是這樣之後幾乎一次過了....覺得前面瞎弄三五天不知道是在幹嘛......Orz

2024年6月24日 星期一

[518] Coin Change II

完蛋~看解答看的好開心 TOT

2024年6月22日 星期六

[3097] Shortest Subarray With OR at Least K II

卡在很奇怪的地方Orz ( 倒地)
在 看懂要去算bit 之後 -- (因為Or 的結果要拿掉的時候,會不知道是誰的1 造成它on起來的,所以用算的去把它拿掉)

[3095] Shortest Subarray With OR at Least K I

想說來寫個sliding window , 結果這題要求用暴力解XD
sliding window是在第二集!!!
好吧那我就不客氣的暴力解了喔 QQ
中間有個可以加速的地方!

[2013] Detect Squares

好像想的太難了!正方形有長寬相等的限制,不用像長方形考慮的那麼多(吧)

2024年6月19日 星期三

[508] Most Frequent Subtree Sum

雖然我不是很確定我在寫什麼(?)
而且還有點搞錯題目的意思(?)
還有一咪咪try & error

2024年6月18日 星期二

[581] Shortest Unsorted Continuous Subarray

什麼,不可以用sorting嗎?! XD

2024年6月16日 星期日

[144] Binary Tree Preorder Traversal

意外的順利(?)真是嚇到我了。

[1110] Delete Nodes And Return Forest

已經參考別人的寫法了~只是把C++翻成C,結果遭遇巨大困難Orz
我真的沒有天份吧唉

2024年6月12日 星期三

[979] Distribute Coins in Binary Tree

奇怪~為何只有我寫的好像計算很多? (thinking 圖)
莫非是,下面往上傳的node value 根本不重要嗎 ?!
(但想想好像也是 ?!)

2024年6月10日 星期一

[79] Word Search(TBD)

ㄜ...是拉了太多天肚子還是怎樣XD 覺得寫的沒有意思T_T
照著答案寫了,懶得想T-T 覺得沒天份QQ

[494] Target Sum

啊~為什麼不能從前面往後面做呢~都西爹QQ

2024年6月9日 星期日

[2578] Split With Minimum Sum

從DP的相關題連過來還以為爆炸難
完全想錯方向 囧

2024年6月8日 星期六

[350] Intersection of Two Arrays II

嗯?! 明明上周才寫過前身,但已經失憶 TOT

[1296] Divide Array in Sets of K Consecutive Numbers

姐妹題來了~結果用C 寫hash table 真是許多眉角= =

2024年6月7日 星期五

[846] Hand of Straights

ㄟ~寫的很慢沒有錯啦~但是誰叫它的hint 說什麼"符合就拿掉, 等到空了就是達成條件"的說法呢!!!先貼吧Orz 之後再去姐妹題寫了有map 的寫法好了...如果我有參透C要怎麼寫的話= =

2024年5月31日 星期五

[231] Power of Two

這什麼!!!算bit數竟然不行嗎 XD 只差兩筆測資!!!負數為什麼還要特別處理!!!太麻煩了吧!!!!!!(怒吼)

2024年5月30日 星期四

[310] Minimum Height Trees

什麼!竟然會超時嗎!!!可惡我完美的recursive 啊XD!!!!!
先貼個超時版本Orz

2024年5月28日 星期二

[349] Intersection of Two Arrays

是不是一個用C++很簡單的題目Orz
奇怪晚上思考能力好差~到底在寫什麼Orz
明天再來寫個hash的版本吧(?)

2024年5月27日 星期一

[785] Is Graph Bipartite?

感覺是一個很老的題目!!!

判斷是不是一個二分圖:在一個無方向graph 裡,如果每一個edge相接的兩個node 分屬不同group,那就是一個二分圖。可以用對node塗色的概念來想!一開始大家都沒有顏色,選一個起始點塗上紅色,和它有edge連接的都塗上綠色。接著往外塗去,如果遇到已經有人上色了的,若是顏色相同,表示這不是一個二分圖。

[404] Sum of Left Leaves

暖身題也搞了好半天Orz tree真難ToT

2024年5月26日 星期日

[1791] Find Center of Star Graph

感覺不出來哪裡還可以更快的一題 (?)

[2497] Maximum Star Sum of a Graph

ㄜ.......果然會超過memory (嗎)
先貼個runtime error 版....

2024年2月19日 星期一

[637] Average of Levels in Binary Tree

有一陣子沒寫tree,很意外竟然自己寫出來XD (所以人家是easy XD!)
對於tree的深度沒有考慮清楚,如果是超級不balance那可能很歪,以上。

2024年2月18日 星期日

[707] Design Linked List

算是基本的linked list 觀念題吧
雖說可以用雙向linked list,但我沒有覺得有太多優點XD 
因為如果加上長度的紀錄,每次要delete 或add時可以選擇從頭或從尾去找到index,
從尾巴算回來的感覺容易錯XDDD(對啦我就是廢QQ)
那就單向的開到底好了 XD 雖然比以前寫完linked list 要快了,但還是漏掉一些頭尾的特殊case啊~~~慎之。

[2279] Maximum Bags With Full Capacity of Rocks

又是一個沒什麼人用C寫的題目XD

2024年2月16日 星期五

[2401] Longest Nice Subarray

竟然栽在括號上!!! 太煩了吧!!!(國劇甩頭)
但好吧其實我也沒辦法推出這麼一步到位的結論QQ
傷心啊XD

2024年2月7日 星期三

[445] Add Two Numbers II

竟然是這題!!!!!!
幸好我還有想到reverse 這件事Orz
但reverse 完卻忘記reverse 回來真是太悲了 Orz

[2966] Divide Array Into Arrays With Max Difference (TBD)

ㄜ... 寫出來似乎並沒有很快!
看了一下別人的寫法,好像用counting sort 去算每個數字出現幾次,也可以解決這題?!

2024年2月2日 星期五

[2074] Reverse Nodes in Even Length Groups

這個算是group reverse linked list 系列吧
雖然對於一次要反轉幾個有點卡住
想說要先算起來還是怎樣的,但先弄起來反而就知道要把reverse 塞在哪兒了吧。

2024年1月29日 星期一

[2078] Two Furthest Houses With Different Colors

這題目是不是太無聊了Orz C只有兩個人寫?! 囧
雖然怪怪的~但也懶的再優化了Orz

2024年1月28日 星期日

[2367] Number of Arithmetic Triplets

本來想說暴力下去解一定會超時,結果竟然沒有XD
但比較奇怪的是,C的solution 裡面大家都沒有用break!奇怪XD

2024年1月27日 星期六

[128] Longest Consecutive Sequence

怪怪der ?! 囧
要找出連續數字的最長長度。數字有可能重覆,但是重覆的不會多算長度。
所以就先sorting 完,把重覆的拿掉,再去求解。
但是看起來不符合題目要求的O(n)  XDDDDDD

2024年1月17日 星期三

[697] Degree of an Array

咦竟然是這題XD!
我還以為是sliding window!原來不是嗎XD(笑我自己廢)

2024年1月15日 星期一

[146] LRU Cache

雖然以前寫過了(?)但是很值得為它重開一篇!!!
以前的寫法,不知道為什麼現在已經compile 不過了 XD
當時用了一個假timer 去紀錄時間,而我現在想不起來我為什麼要把它宣告成static !!!
(比較厲害嗎?XD)

總之就是據說要有一個雙向linked list,這樣它新增刪除會比較快,
另外也最好有hash table去存,這樣找人也比較快!!!
因為題意的key最多10001種,所以直接拿它當hash key !!!

在一直滾來滾去然後各種拖延之後,沒有debug很久就pass了!!!(感動落淚)
看來linked list 已經可以了吧(自己說)
速度看起來不快XD 不過至少沒有超時,我可以接受XD(誰理妳XD)
在get和put的時候,如果已有同樣的key存在,我的作法是先把它delete掉,
再加進去,求個"感覺上"的乾淨俐落XD 但我不確定如果只有更新重新排序的方法會不會比較快XD 以上兒~~~~~

#define MAX_KEYS 10001

struct myNode{
int key;
int val;
struct myNode *next;
struct myNode *pre;
};

typedef struct {
struct myNode *head;
struct myNode *tail;
int size;
int count;
struct myNode *queue[MAX_KEYS];
} LRUCache;

void debugPrint(LRUCache* obj)
{
printf("===debugPrint===\n");
struct myNode *ptr= obj->head;
while (ptr != NULL)
{
printf("key %d val %d\n",ptr->key, ptr->val);
ptr = ptr->next;
}
printf("===End debugPrint===\n");
}

LRUCache* lRUCacheCreate(int capacity) {
LRUCache* LRU = calloc (1, sizeof (LRUCache));
LRU-> size= capacity;
LRU-> count = 0;
LRU->head = NULL;
LRU->tail = NULL;
return LRU;
}

void addqueue(LRUCache* obj, int key, int value) {
obj->queue[key] = calloc (1 , sizeof (struct myNode));
obj->queue[key]-> pre = obj->tail;
obj->queue[key]-> next = NULL;
if (obj->tail != NULL)
obj->tail->next = obj->queue[key];
obj->tail = obj->queue[key];
obj->queue[key]->val = value;
obj->queue[key]->key = key;
if (obj->head == NULL)
obj->head = obj->queue[key];
obj->count ++;

}

void removequeue(LRUCache* obj, int key) {
struct myNode *ptr= obj->queue[key];
struct myNode *ptr_pre = obj->queue[key]->pre;
struct myNode *ptr_next = obj->queue[key]->next;
if (ptr_pre == NULL)//head
{
obj->head = ptr_next;
if (ptr_next != NULL)
ptr_next->pre = NULL;
}
else
ptr_pre->next = ptr_next;
if (ptr_next == NULL) // tail
{
obj->tail = ptr_pre;
if (ptr_pre != NULL)
ptr_pre->next = NULL;
}
else
ptr_next->pre = ptr->pre;

ptr_pre=NULL;
ptr_next = NULL;
obj->queue[key] = NULL;
free (obj->queue[key]);
obj->count --;
}

int lRUCacheGet(LRUCache* obj, int key) {
if (obj->queue[key] == NULL)
return -1;

int value = obj->queue[key]->val;
removequeue(obj,key);
addqueue(obj,key, value);
return obj->queue[key]->val;
}

void lRUCachePut(LRUCache* obj, int key, int value) {
if (obj->queue[key]!= NULL)
removequeue(obj,key);
else if (obj->count == obj-> size)
removequeue(obj,obj->head->key);

addqueue(obj,key, value);
//debugPrint(obj);
}

void lRUCacheFree(LRUCache* obj) {
for (int i=0; i< MAX_KEYS; i++)
free(obj->queue[i]);
free(obj);
}

/**
* Your LRUCache struct will be instantiated and called as such:
* LRUCache* obj = lRUCacheCreate(capacity);
* int param_1 = lRUCacheGet(obj, key);
* lRUCachePut(obj, key, value);
* lRUCacheFree(obj);
*/