寒假刷題打卡第五天 貪心 二分查詢

2021-10-19 06:00:36 字數 2228 閱讀 7943

子陣列最大的和

受到昨天最後一題的啟發,第一反應就是維護乙個全域性最大值和乙個區域性最大值。那麼為題就是什麼時候更新區域性最大值,什麼時候更新全域性最大值呢?最開始的想法是,如果nums[i]<0就不把nums[i]算進區域性最大值,但是很容易發現這種思路不對。

於是後面想到正確的判斷條件是,如果區域性最大值小於0,我們就更新將現在的元素初始化新的區域性最大值。

class

solution

g_max =

max(g_max, l_max);}

return g_max;}}

;

劃分字母區間

思路很簡單,利用雙指標,乙個從前往後,乙個從後往前。如果二者相同,則找到某個最小區間的子集。接著,遍歷這個子集內的所有元素是否在後指標之後,在的話更新子集的右區間為它的索引。

為了使得速度更快一點,考慮遍歷的過程中如果遇到之前已經訪問過的元素,則直接跳過。由於元素是由26個小寫字母組成,所以,可以通過維護乙個size為26的vector來記錄某個元素是否訪問過(試驗證明能減少50%的時間)。

class

solution

while

(lread[s[l]

-'a']=

1;r=loc_r;}}

ans.

push_back

(r-ol+1)

; read = read2;

r=s.

size()

-1; l++;}

return ans;

}int

vec_sum

(vector<

int>

& v)

};

看了答案,有利用字典的方法。字典的key就是s中的沒個元素,value是該元素對應的最後乙個索引。我記得劍指offer上有道題目,為了找到某個位置,書上給的方法是for loop遍歷,leetcode上也有答案想到了用字典代替遍歷。

但是字典其實會佔據比較大的空間。官方解答中,用26個長度的向量代替了字典。

class

solution

for(

int i =

0; i < s.

size()

; i ++)}

return result;}}

;

接下來是二分查詢的內容

3. 開方

class

solution

return l;}}

;

法2:取對數

class

solution

int ans =

exp(

0.5*

log(x));

//c++中的

return((

long

long

)(ans +1)

*(ans +1)

<= x ? ans +

1: ans);}

};

尋找比目標字母大的最小字母

class

solution

if(lsize()

-1)return letters[l]

<= target ? letters[l+1]

: letters[l]

;else

return letters[l]

<= target ? letters[0]

: letters[l];}

};

找出單一元素

劍指offer原題。

class

solution

};

打臉了,題目要求o(logn)時間複雜度,顯然位運算不對。改為二分:

class

solution

else

if(nums[mid-1]

==nums[mid]&&(

(mid-l+1)

%2==0

))else

if(nums[mid-1]

!=nums[mid]&&(

(mid-l+1)

%2==1

))else

}return nums[l];}

};

打卡第五天

給你一堆具有長度和重量的木頭,讓你去機器裡加工,機器會有乙個一分鐘的set時間,首次加工需要set一次,當連續放入的木頭不滿足後者的長度和重量都大於等於前者時,機器需要set一下,讓你求出最短的set時間 不用求出序列 三 思路分析 我們會非常直觀的想到從小到大進行排序,但很遺憾,長度和重量我們都必...

寒假第五天

距離回家還有五天 昨天學習了微控制器的課程 一 簡介 微控制器 microcontrollers 是一種 積體電路 晶元,是採用超大規模積體電路技術把具有資料處理能力的 處理器 cpu 隨機儲存器ram 唯讀儲存器rom 多種i o口和 中斷系統 定時器 計數器等功能 可能還包括顯示驅動電路 脈寬調...

python打卡第五天

當不按順序提供預設引數時,需要把引數名寫上去 定義預設引數要牢記 預設引數必須指向不變物件 設計不變物件是因為不變物件一旦建立就不能修改,減少了由於修改資料導致的錯誤,而且由於物件不變,多工環境下同時讀取物件不需要加鎖。因此在程式設計時盡量使用不變物件 可變引數 可變引數是要求在引數前加個 號,引數...