子陣列最大的和
受到昨天最後一題的啟發,第一反應就是維護乙個全域性最大值和乙個區域性最大值。那麼為題就是什麼時候更新區域性最大值,什麼時候更新全域性最大值呢?最開始的想法是,如果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打卡第五天
當不按順序提供預設引數時,需要把引數名寫上去 定義預設引數要牢記 預設引數必須指向不變物件 設計不變物件是因為不變物件一旦建立就不能修改,減少了由於修改資料導致的錯誤,而且由於物件不變,多工環境下同時讀取物件不需要加鎖。因此在程式設計時盡量使用不變物件 可變引數 可變引數是要求在引數前加個 號,引數...