摘要:題目要求給一個閉區(qū)間,對該閉區(qū)間的所有數(shù)字進行與運算。在計算機底層所有的十進制數(shù)都是以二進制數(shù)進行存儲的。因此,當(dāng)我們同時左移時,一定會有一個時刻,使得與相等。這意味著,從該位起前面的所有位數(shù)值均相等。
題目要求
Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4.
給一個閉區(qū)間[m,n],對該閉區(qū)間的所有數(shù)字進行與(and)運算。
與預(yù)算是指 1 and 1 = 0, 1 and 0 = 0, 0 and 1 = 0, 0 and 0 = 0。
這里都是以二進制為基礎(chǔ)進行與運算。在計算機底層所有的十進制數(shù)都是以二進制數(shù)進行存儲的。寫這道題目之前需要先去了解十進制轉(zhuǎn)二進制以及未操作符>>,>>>和<<。
其實可以想到,如果一個區(qū)間含有偶數(shù),那么這個區(qū)間中一定有一個數(shù),其二進制的末位為0,那么就意味著這些數(shù)在該位上的與運算結(jié)果一定為0。
計算完末位后,我們來計算倒數(shù)第二位的與運算。這就相當(dāng)于將[m, n]區(qū)間轉(zhuǎn)化為[m/2,n/2]區(qū)間,在該區(qū)間上我們再來判斷是否包含偶數(shù)。
在一番嘗試之后,我們會發(fā)現(xiàn),如果一個區(qū)間[m,n],當(dāng)m不等于n時,其中一定包含偶數(shù),即該末位的和運算一定為0。
因此,當(dāng)我們同時左移m,n時,一定會有一個時刻,使得m與n相等。這意味著,從該位起前面的所有位數(shù)值均相等。它們進行任何與運算一定等于它們本身。我們可以直接將這些位的內(nèi)容添加到結(jié)果集開頭。
代碼如下:
public int rangeBitwiseAnd(int m, int n) { if(m==n) return m; int count = 0; while(m>>= 1 ; n >>>= 1; } return m<<=count; }
優(yōu)化后代碼如下:
public int rangeBitwiseAnd2(int m, int n) { if(m==n) return m; int count = 1; while(m>>= 1 ; n >>>= 1; } return m * count; }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68437.html
Problem Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1:Input: [1,2,3]Output: 6Example 2:Input: [1,2,3,4]Output: 24Note:The length of the ...
摘要:刷題繼續(xù)昨天和大家分享了題,今天繼續(xù)來刷題解法一解法二解法一解法一解法二解法一解法一解法二解法一解法一解法二解法一解法二解法一解法二解法三解法一解法二源代碼下載這十道題的代碼在我的上,如果大家想看一下每道題的輸出結(jié)果,可以點擊以下鏈接下 刷題繼續(xù) 昨天和大家分享了61-70題,今天繼續(xù)來刷71~80題 Question 71: Please write a program to out...
Problem Given an array of integers nums, write a method that returns the pivot index of this array. We define the pivot index as the index where the sum of the numbers to the left of the index is equa...
摘要:公眾號愛寫給定一個已按照升序排列的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。函數(shù)應(yīng)該返回這兩個下標(biāo)值和,其中必須小于。示例輸入輸出解釋與之和等于目標(biāo)數(shù)。 公眾號: 愛寫bug(ID:icodebugs) 給定一個已按照升序排列 的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。 函數(shù)應(yīng)該返回這兩個下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。...
摘要:公眾號愛寫給定一個已按照升序排列的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。函數(shù)應(yīng)該返回這兩個下標(biāo)值和,其中必須小于。示例輸入輸出解釋與之和等于目標(biāo)數(shù)。 公眾號: 愛寫bug(ID:icodebugs) 給定一個已按照升序排列 的有序數(shù)組,找到兩個數(shù)使得它們相加之和等于目標(biāo)數(shù)。 函數(shù)應(yīng)該返回這兩個下標(biāo)值 index1 和 index2,其中 index1 必須小于 index2。...
閱讀 2839·2023-04-25 20:06
閱讀 1454·2021-08-26 14:15
閱讀 2244·2021-08-12 13:27
閱讀 1782·2019-08-30 15:55
閱讀 3480·2019-08-30 13:20
閱讀 2836·2019-08-29 15:12
閱讀 3340·2019-08-29 15:06
閱讀 2871·2019-08-29 14:13