LC860檸檬水找零(未掌握)
- 未掌握分析:20的時候找零卡住,同時貪心思路就想了很久
- 當bill[i]=20的時候,我們有兩種找零范式,找零10、5和找零三個5,優先找零10、5,因為三個5是可以替代10、5的情況的,我們需要留著三個5防備其他情況。
- 代碼
LC406根據身高重建隊列(未掌握)
- 兩個維度的題目,與LC135分糖果一樣,一定要先確定一個維度,再確定另一個維度。如果兩個維度一起考慮一定會顧此失彼。
- 如果是先按照K從小到大排序,可以發現K維度和h維度哪個都沒有確定下來,與思想違背,因為先確定h再確定k
- h從大到小排(h相同的話則k小的站前面),讓高個子在前面
- 只需要按照k為下標重新插入隊列,因為身高是按照高到低排序的,因此可以保證下標k之前一定有個k(0-k-1)個人身高大于或者等于k處的身高
- ==使用lambda函數完成數組的排序,需要熟悉這種寫法(a,b)->{if(a[0]b[0]) return a[1]-b[1];else return b[0]-a[0];}
- 向list的指定位置插入元素的方法:add(index,value)
- list轉換為數組list.toArray(new int[nums.length]);
- 代碼
LC452用最少數量的箭引爆氣球(未掌握)
- 最初的思考是把數組看作是一段范圍,只要范圍重合了一個箭就可以解決,但是思路是有問題的,因為三個數組不一定全部都有重疊部分,可能是兩兩重疊兩兩重疊(此時需要兩個箭,但是只計數了1),原本的想法只統計了孤立的范圍的個數,但是卻并不是結果數
- 算法的思路:當氣球出現重疊,一起射,所用弓箭最少
- 為了讓氣球盡可能的重疊,需要對數組進行排序
- 如果氣球重疊了,重疊氣球中右邊邊界的最小值之前的區間一定需要一個弓箭
- 代碼思路即每次都取重疊范圍的最小右邊界,如果不重疊就result++
- 代碼
數組排序出錯?待解釋
[[-2147483646,-2147483645],[2147483646,2147483647]]-》[[2147483646,2147483647],[-2147483646,-2147483645]]