leetcode打卡day02 二分查詢

2021-10-10 19:03:36 字數 3062 閱讀 5111

之前寫過二分查詢的模板,參見部落格二分查詢模板

leetcode744

解題思路:此題為找到大於目標字元的第乙個字元,及0000011111問題查詢第乙個1,利用模板即可。另外注意特殊情況,當目標值比最後乙個字元都大的時候,返回第乙個字串。

class

solution

while

(l!=r)

else

}return letters[l];}

};

leetcode540

要求:時間複雜度為(ologn),因此不能遍歷陣列用異或操作,

解題思路:因為陣列大小肯定為奇數,因此可以只索引偶數節點。

class

solution

// return ans;

int l=

0,r=nums.

size()

-1;while

(l!=r)

if(nums[mid]

==nums[mid+1]

)else

}return nums[l]

;}

leetcode278

0000111問題找第乙個滿足條件的1

// the api isbadversion is defined for you.

// bool isbadversion(int version);

class

solution

else

}return l;}}

;

leetcode153

0001111問題查詢第乙個1

class

solution

else

}return nums[l];}

};

leetcode34

題目描述:給定乙個有序陣列 nums 和乙個目標 target,要求找到 target 在 nums 中的第乙個位置和最後乙個位置。

解題思路:可以用二分查詢找出第乙個位置和最後乙個位置,但是尋找的方法有所不同,需要實現兩個二分查詢。即000111問題找第乙個1和1111000問題找最後乙個1,最後兩者的並集即為答案。

但是如果我們將尋找 target 最後乙個位置,轉換成尋找 target+1

第乙個位置,再往前移動乙個位置。這樣我們只需要實現乙個二分查詢**即可。

class

solution

;int l=

0,r=nums.

size()

-1;while

(l!=r)

else}if

(nums[l]

!=target)

return

;int start=l;

l=0,r=nums.

size()

-1;while

(l!=r)

else}if

(nums[l]

!=target)

return

;int end=r;

return;}

};

更改後的**

class

solution

else

}return l;

} vector<

int>

searchrange

(vector<

int>

& nums,

int target);}

return;}

};

在尋找第乙個位置的二分查詢**中,需要注意 h 的取值為 nums.size(),而不是 nums.size() - 1。

先看以下示例:

nums = [2,2], target = 2

如果 h 的取值為 nums.size() - 1,那麼 last = findfirst(nums, target + 1) - 1 =

1 - 1 = 0。這是因為 findleft 只會返回 [0, nums.length - 1] 範圍的值,對於

findfirst([2,2], 3) ,我們希望返回 3 插入 nums 中的位置,也就是陣列最後乙個位置再往後乙個位置,即

nums.size()。所以我們需要將 h 取值為 nums.size(),從而使得 findfirst返回的區間更大,能夠覆蓋

target 大於 nums 最後乙個元素的情況。

劍指offer–在公升序陣列**現的次數

題目描述

解題思路:

二分查詢,因為是有序陣列,利用兩次二分查詢,查詢小於等於k的最後乙個位置,即1111000找最後乙個1,再一次二分查詢大於等於k的第乙個位置,000111的第乙個1;兩者相減即為出現的次數,,和上面一題類似。

class

solution

else

} low_b=l;

l=0,r=data.

size()

-1;while

(l!=r)

else

} high_b=r;

return low_b-high_b+1;}};

js學習 打卡day02

2.轉換方式 規則 轉換規則是什麼?關係 邏輯 強制 主動轉換,可以拿到轉換結果 parsefloat 要轉換的字元 math.round 要轉換的字元 number 要轉換的字元 數值轉字元 要轉的數值.tofixed n string 要轉的數字 其他轉布林 三大特殊資料 程式的結構 選擇 分支...

Python100天打卡 Day02 語言元素

指令和程式 變數和型別 變數是一種儲存資料的載體,計算機中的變數是實際存在的資料或者說是儲存器中儲存資料的一塊記憶體空間。python中的資料型別很多,常見的有 變數命名規則 變數名由字母 廣義的unicode字元,不包括特殊字元 數字和下劃線構成,數字不能開頭。大小寫敏感 大寫的a和小寫的a是兩個...

day02 資料儲存

librarys c和c 的 庫 linux kernel 操作硬體裝置 開發步驟 1.建立android專案 2.設計布局 3.新增事件監聽 4.發布執行 資料儲存 openfileinput string filename 開啟 data data 包名 files目錄下檔案對應的輸入流 sd卡...