DAY1 29 兩數相除(二分查詢)

2021-10-03 17:24:05 字數 1153 閱讀 3862

1.題目描述

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3

輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3

輸出: -2

說明:被除數和除數均為 32 位有符號整數。

除數不為 0。

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。

2.思路

1.最直接的思路:做減法,一直減去被除數,不斷更新差,直至差小於零,減的次數即結果

但這種方法效率太差;

2.考慮到給出提示,採用二分查詢的方法:

主要思想:二分查詢+遞迴

返回商加總的結果與被除數的剩餘值;

二分查詢 體現在 不斷將除數x2,比第一種思路要快速很多;

用遞迴控制函式的結束

3. 其他注意事項

1. 對除數是1,-1,或被除數是0時的特殊處理

2..邊界處的處理

4.** 

class solution

int sign = 1;

long a = dividend;

long b = divisor;

if((a>0&&b<0) || (a<0&&b>0)) sign=-1;

a = a>0?a:-a;

b = b>0?b:-b;

long res = div(a,b) ;

if(sign > 0 ) return res;

return -res;

}int div(long a, long b){

if(a5.參考

leetcode題解:

github題解:

二分查詢數

二分搜尋,也稱折半搜尋 二分查詢,是用來在乙個有序陣列中查詢某一元素的演算法。以在乙個公升序陣列中查詢乙個數為例。它每次考察陣列當前部分的中間元素,如果中間元素剛好是要找的,就結束搜尋過程 如果中間元素小於所查詢的值,那麼左側的只會更小,不會有所查詢的元素,只需要到右側去找就好了 如果中間元素大於所...

leetcode29 兩數相除 二分法

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divis...

二分查詢與二分答案 A B 數對

出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。第一行,兩個整數 n,c。第二行,...