ㄟ......忽略題目要求,暴力法解之 XD
2024年10月5日 星期六
2024年10月3日 星期四
2024年9月28日 星期六
2024年9月13日 星期五
2024年8月13日 星期二
[1019] Next Greater Node In Linked List
的確是用了stack ! 的確是要存index 再去寫到return array !
不過雙重轉換的部分果然是搞砸了 XD
2024年8月11日 星期日
2024年8月6日 星期二
2024年8月4日 星期日
[950] Reveal Cards In Increasing Order
看起來是一個可以用index 硬幹的題目(?)
數學不好真的很吃虧(牽拖)還想說用recursive 來寫(!)
搞個return array 就快史惹bar XD
2024年8月1日 星期四
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日 星期四
2024年7月24日 星期三
[1013] Partition Array Into Three Parts With Equal Sum
覺得寫的有點醜Orz 以為有什麼厲害的解法但好像還好?!
不LIKE, 不想多研究Orz 下一題!
2024年7月13日 星期六
2024年7月12日 星期五
2024年7月3日 星期三
[1971] Find if Path Exists in Graph
偷吃步 a.k.a 先偷看解答的寫法!原來有一種東西叫做union find Orz
leetcode 不管寫幾題,總是有新的東西呢T.T
2024年7月2日 星期二
2024年6月30日 星期日
[39] Combination Sum
本來想用dp的算有幾種來延伸,發現是一場災難Orz
原來要用backtracking,然後原來backtracking 的template 就是tree的traversal時使用的DFS啊啊啊啊啊(倒退十五步)
發現是這樣之後幾乎一次過了....覺得前面瞎弄三五天不知道是在幹嘛......Orz
2024年6月24日 星期一
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
中間有個可以加速的地方!
2024年6月19日 星期三
2024年6月18日 星期二
2024年6月16日 星期日
2024年6月12日 星期三
[979] Distribute Coins in Binary Tree
奇怪~為何只有我寫的好像計算很多? (thinking 圖)
莫非是,下面往上傳的node value 根本不重要嗎 ?!
(但想想好像也是 ?!)
2024年6月10日 星期一
2024年6月9日 星期日
2024年6月8日 星期六
2024年6月7日 星期五
[846] Hand of Straights
ㄟ~寫的很慢沒有錯啦~但是誰叫它的hint 說什麼"符合就拿掉, 等到空了就是達成條件"的說法呢!!!先貼吧Orz 之後再去姐妹題寫了有map 的寫法好了...如果我有參透C要怎麼寫的話= =
2024年5月31日 星期五
2024年5月30日 星期四
2024年5月28日 星期二
2024年5月27日 星期一
[785] Is Graph Bipartite?
感覺是一個很老的題目!!!
判斷是不是一個二分圖:在一個無方向graph 裡,如果每一個edge相接的兩個node 分屬不同group,那就是一個二分圖。可以用對node塗色的概念來想!一開始大家都沒有顏色,選一個起始點塗上紅色,和它有edge連接的都塗上綠色。接著往外塗去,如果遇到已經有人上色了的,若是顏色相同,表示這不是一個二分圖。
2024年5月26日 星期日
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啊~~~慎之。
2024年2月16日 星期五
2024年2月7日 星期三
[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日 星期一
2024年1月28日 星期日
2024年1月27日 星期六
[128] Longest Consecutive Sequence
怪怪der ?! 囧
要找出連續數字的最長長度。數字有可能重覆,但是重覆的不會多算長度。
所以就先sorting 完,把重覆的拿掉,再去求解。
但是看起來不符合題目要求的O(n) XDDDDDD
2024年1月17日 星期三
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);
*/