往googler的路上day6

Han-Ru Chen
3 min readFeb 12, 2021

--

今天忘記打字練習了XD!明天練習一波。

看了數據之後知道大概練習超過25個小時以後打字速度就會快到飛起XD

然而要面對這些挫折感需要努力啦!昨天第一次練習才打16分鐘就不想打了因為打錯真的很煩。

今天練習了Binary Search

心得如下:

  1. 使用前必須先排序
  2. 實作時,當想以L為答案,(R = mid -1) 的-1常忘記

(代表mid不是我們要的答案)
而L = mid 是因為 mid 可能是答案人選
BINARY SEARCH 只能意會 不可背公式,不可以硬套,因為會有各種不同情況的BINARY SEARCH應用。

上述看不懂很正常,總結來說,就是你會因為各種狀況而讓你select出的值要特別設定,舉例來說,你可能要在陣列中所引出某個值,沒有則RETURN-1,

那你就必須讓 L = mid + 1, R = mid-1, while(L < = R)

然後 if(array[mid] 滿足條件) return mid;

但是當你要在此陣列中找出最小的可能時,你就不能這樣做了。

你就必須 while(L < R) 當兩者相鄰時 BREAK;

此時我自己會設置 L = 0, R = 陣列長度(此地方索引不出來)

// 如此設置也是因為 ( L + R)/2 最小可以變成0 最大變成N-1

//那就代表包含了陣列裡每一種可能

if(array[mid] >條件) R = mid ;

else if ( array[mid] < 條件 ) L = mid + 1;

// 因為當相鄰的時候,mid會變成L,此時代表不管執行上述哪個

//判斷式,我們都能保證 R 是最佳解且每個元素都有被檢查到

附上題目

這裡補充upper_bound() && lower_bound()的用法

upper_bound(陣列開頭位置,陣列開頭位置 + 長度, 數字)

lower_bound(陣列開頭位置,陣列開頭位置 + 長度, 數字)

此兩者前面跟sort函式一模一樣,數字是比較對象

upper_bound回傳第一個大於的位置(即指標)

lower_bound回傳第一個大於等於的位置(即指標)

將兩指標相減 假設地址相差8bytes, 那就會res += 8 / sizeof(long long int)

所以會知道個數,神奇用法RRR

那如果要索引值的話,只要(*)(upper_bound) 就可以囉。

今天看電影的時候,看到了一句非常感人的話,

“Being genius is not enough, it takes courage to change people’s hearts.”

以及

“The world is full of lonely people that are afraid to make the first move.”

願明天的自己能繼續努力囉~

--

--

Han-Ru Chen
Han-Ru Chen

Written by Han-Ru Chen

如果能夠重新投胎選擇任一人的人生,我想選擇我自己。 \ linktr: https://linktr.ee/future_outlier\ ted talk: https://youtu.be/aV-Pvb-qmC0?si=lvCFpZde5erQH-wZ \

No responses yet