打家劫舍+數字範圍按位與
目錄
Leetcode213 打家劫舍
解題思路:
在不構成環的情況下,狀態轉移方程為:
環狀排列意味著 第一個房子和最後一個房子只能選擇一個偷竊,因此可以把此環狀排列問題約化為兩個單排排列房間子問題
- 1. 在不偷竊第一個房子的情況下(即),最大金額是
- 2. 在不偷竊最後一個房子的情況下(l即),最大金額是
綜合偷竊最大金額:以上兩種情況的較大值,即()
程式碼如下
class Solution {
public int rob(int[] nums) {
if(nums == null || nums.length == 0){
return 0;
}
if(nums.length == 1){
return nums[0];
}
if(nums.length == 2){
return Math.max(nums[0], nums[1]);
}
int res1 = myRob(Arrays.copyOfRange(nums, 0, nums.length - 1));
int res2 = myRob(Arrays.copyOfRange(nums, 1, nums.length));
return Math.max(res1, res2);
}
public int myRob(int[] nums){
int pre = 0;
int cur = 0;
for(int num : nums){
int tmp = cur;
cur = Math.max(pre + num, cur);
pre = tmp;
}
return cur;
}
}
LeetCode201數字範圍按位與
解題思路
例如m = 9 n = 11
先對範圍內的每個數字用二進位制的字串表示,例如9 = 00001001,然後將每個二進位制字串的位置對齊
得出所有數字按位與運算的結果是所有二進位制字串的公共字首再用零補上後面的剩餘位。證明如下:
假設對所有的這些二進位制,前位均相同,第位開始不同,因為連續,所以第在的數字範圍從小到大列舉出來一定是前面全部是0,後面全部是1,上圖中對應的[9,11]全是0,[12,12]全是1.並且一定存在連續的兩個數和,滿足的第位為0,後面全為1,的第位為1,後面全為0。對應上圖中的例子11和12.這種形如0111...和1000...的二進位制的按位與的結果一定為0000...,因此第位開始的剩餘均為0,前位因為都相同,按位與結果也保持不變。最後的答案為二進位制字串的公共字首再用零補上後面的剩餘位。如何求呢?採用位移操作。
將兩個數字不斷向右移動,直到數字相等,即數字被壓縮減為它們的公共字首。然後通過將公共字首向左移動,將零新增到公共字首的右邊以獲得最終結果。
程式碼如下
class Solution {
public int rangeBitwiseAnd(int m, int n) {
int shift = 0;
while(m < n){
m >>= 1;
n >>= 1;
shift ++;
}
return m << shift;
}
}
相關文章
- 隨機範圍小數和隨機範圍整數隨機
- Python限制輸入數字的範圍常用方法!Python
- jQuery Validate限定輸入數字大小的範圍jQuery
- MySQL欄位的取值範圍MySql
- 對十進位制數字的按位輸出,取反,並求其位數
- 402. 移掉K位數字 (按位考慮 貪心)
- java位運算子的應用範圍Java
- 雙重按位非運算子 ~~ 對數字取整
- GSMA:通過改善移動覆蓋範圍推動數字革命
- mysql int(3)與int(10)的數值範圍相同嗎?MySql
- 輸出符合範圍內的水仙花數:一個三位數,它的各位數字的立方和等於其本身
- abc238D 兩數之和跟按位與
- 基礎 變數的作用範圍變數
- Cookie 的特徵與範圍用例Cookie特徵
- JavaScript & 按位與運算子JavaScript
- 生成某個範圍的隨機數隨機
- 在指定範圍內生成隨機數隨機
- 實體店是否屬於數字化智慧經營的適用範圍?
- 如何在Mac上設定系統範圍的字數統計服務Mac
- JavaScript基礎 —— DOM:遍歷 與 範圍JavaScript
- [20221130]PLSQL的變數作用範圍(linux).txtSQL變數Linux
- 如何產生指定範圍的隨機數隨機
- 匹配指定範圍整數正規表示式
- 學習linux可以幹什麼崗位薪資範圍Linux
- 範圍分割槽
- 軟考——範圍
- 打家劫舍
- (原創)高DPI適配經驗系列:(二)按DPI範圍適配
- Day 42 | 198.打家劫舍 、213.打家劫舍II、337.打家劫舍III
- 計算機組成與體系結構-數值表示範圍-浮點數計算計算機
- C C++變數型別大小和範圍C++變數型別
- 移掉 K 位數字
- SciPy 應用範圍
- JavaScript 拖拽限定範圍JavaScript
- Linux UID是什麼?其數值範圍有哪些?LinuxUI
- Java按位或合併ipv6字首和字尾Java
- SQL字元型欄位按數字型欄位排序實現方法SQL字元排序
- python - 生成時間範圍Python