??題目來源:
? ? ? ? leetcode題目,網(wǎng)址:1893. 檢查是否區(qū)域內(nèi)所有整數(shù)都被覆蓋 - 力扣(LeetCode)
解題思路:
? ? ? ?start 和 end 的取值范圍是 1- 50,因此可以使用比特位位數(shù)為 64 的 Long 來表示,第 i 位為 1表示 i 在范圍內(nèi),否則不在。
? ? ? ? ?獲得范圍后,通過邏輯運算將所給區(qū)間與數(shù)組內(nèi)區(qū)間進行邏輯運算,若所給區(qū)間內(nèi)的某個數(shù)在數(shù)組區(qū)間內(nèi),對應位變?yōu)?1 ,即當且僅當所給區(qū)間第 i 位為 1 且數(shù)據(jù)內(nèi)區(qū)間 第 i 位為 0 時結(jié)果為 1 。對應邏輯運算:a&1&(!b)。?最后返回 所給區(qū)間是否為 0 即可。??
解題代碼:
class Solution {
public boolean isCovered(int[][] ranges, int left, int right) {
long range=0;
long one=1;
range=((one<<(right)) - (one<<(left-1)));
for(int i=0;i<ranges.length;i++){
long temp=((one<<(ranges[i][1])) - (one<<(ranges[i][0]-1)));
range= (range &((one<<51)-1))&((~temp)) ;
}
return range==0;
}
}
總結(jié):
? ? ? ? 1<<51 實際為 1<<(51%32) ,因為系統(tǒng)默認 1 為整型,在寫代碼時,這個報錯處理了好長時間。文章來源:http://www.zghlxwxcb.cn/news/detail-518448.html
? ? ? ? 官方題解是基于差分數(shù)組的思想解題的。新建整數(shù)數(shù)組,對于數(shù)據(jù)內(nèi)的某個區(qū)間[ranges[0],range[1]] ,將ranges[0] 對應值加一,range[1]+1 對應值減去一,這樣在對所有區(qū)間進行相同的操作后,遍歷整數(shù)數(shù)組并求前綴和的過程中,就得到了每個數(shù)被包含在多少個 ranges 區(qū)間中。在計算時,若某個數(shù)包含在 0 個 ranges 區(qū)間中但包含在 [left,right] 區(qū)間中,返回false。文章來源地址http://www.zghlxwxcb.cn/news/detail-518448.html
到了這里,關于題目:1893.檢查是否區(qū)域內(nèi)所有整數(shù)都被覆蓋的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!