摘要:題目要求給一個閉區間,對該閉區間的所有數字進行與運算。在計算機底層所有的十進制數都是以二進制數進行存儲的。因此,當我們同時左移時,一定會有一個時刻,使得與相等。這意味著,從該位起前面的所有位數值均相等。
題目要求
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.
給一個閉區間[m,n],對該閉區間的所有數字進行與(and)運算。
與預算是指 1 and 1 = 0, 1 and 0 = 0, 0 and 1 = 0, 0 and 0 = 0。
這里都是以二進制為基礎進行與運算。在計算機底層所有的十進制數都是以二進制數進行存儲的。寫這道題目之前需要先去了解十進制轉二進制以及未操作符>>,>>>和<<。
其實可以想到,如果一個區間含有偶數,那么這個區間中一定有一個數,其二進制的末位為0,那么就意味著這些數在該位上的與運算結果一定為0。
計算完末位后,我們來計算倒數第二位的與運算。這就相當于將[m, n]區間轉化為[m/2,n/2]區間,在該區間上我們再來判斷是否包含偶數。
在一番嘗試之后,我們會發現,如果一個區間[m,n],當m不等于n時,其中一定包含偶數,即該末位的和運算一定為0。
因此,當我們同時左移m,n時,一定會有一個時刻,使得m與n相等。這意味著,從該位起前面的所有位數值均相等。它們進行任何與運算一定等于它們本身。我們可以直接將這些位的內容添加到結果集開頭。
代碼如下:
public int rangeBitwiseAnd(int m, int n) { if(m==n) return m; int count = 0; while(m>>= 1 ; n >>>= 1; } return m<<=count; }
優化后代碼如下:
public int rangeBitwiseAnd2(int m, int n) { if(m==n) return m; int count = 1; while(m>>= 1 ; n >>>= 1; } return m * count; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 ...
摘要:刷題繼續昨天和大家分享了題,今天繼續來刷題解法一解法二解法一解法一解法二解法一解法一解法二解法一解法一解法二解法一解法二解法一解法二解法三解法一解法二源代碼下載這十道題的代碼在我的上,如果大家想看一下每道題的輸出結果,可以點擊以下鏈接下 刷題繼續 昨天和大家分享了61-70題,今天繼續來刷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...
摘要:公眾號愛寫給定一個已按照升序排列的有序數組,找到兩個數使得它們相加之和等于目標數。函數應該返回這兩個下標值和,其中必須小于。示例輸入輸出解釋與之和等于目標數。 公眾號: 愛寫bug(ID:icodebugs) 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等于目標數。 函數應該返回這兩個下標值 index1 和 index2,其中 index1 必須小于 index2。...
摘要:公眾號愛寫給定一個已按照升序排列的有序數組,找到兩個數使得它們相加之和等于目標數。函數應該返回這兩個下標值和,其中必須小于。示例輸入輸出解釋與之和等于目標數。 公眾號: 愛寫bug(ID:icodebugs) 給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等于目標數。 函數應該返回這兩個下標值 index1 和 index2,其中 index1 必須小于 index2。...
閱讀 2825·2023-04-25 20:06
閱讀 1446·2021-08-26 14:15
閱讀 2234·2021-08-12 13:27
閱讀 1772·2019-08-30 15:55
閱讀 3469·2019-08-30 13:20
閱讀 2826·2019-08-29 15:12
閱讀 3330·2019-08-29 15:06
閱讀 2858·2019-08-29 14:13