利用位運算判斷陣列中是否有重複的數字
討論這個主題的來由是《劍指offer》上的一道題目:
解題思路:
只要滿足條件
1)陣列的長度為5;
2)陣列中的最大值減去最小值小於5(最大值、最小值不取0);
3)除0外沒有重複的數字。
這個陣列就是連續的,即可組成順子。
程式碼如下:
class Solution {
public:
bool IsContinuous( vector<int> numbers ) {
if(numbers.size() != 5)
return false;
int min = 14; // 設定最小值的初始值
int max = -1; // 設定最大值的初始值
int flag = 0; // flag用於判定陣列中是否有重複值
for(int i = 0; i < 5; i++){
// 根據題意,數字的範圍為1-13,若不在此範圍則返回false
if(numbers[i] < 0 || numbers[i] > 13)
return false;
if(numbers[i] == 0)
continue;
// 判斷數字是否重複
if(((1 << numbers[i]) & flag) > 0)
return false;
flag |= (1 << numbers[i]);
if(numbers[i] > max)
max = numbers[i];
if(numbers[i] < min)
min = numbers[i];
// 判斷最大值與最小值的差是否小於5
if(max - min > 4)
return false;
}
return true;
}
};
我們用到了位運算來判斷陣列中是否存在重複值,它的原理簡單且實用:
因為我們的數字範圍為1-13,用每一個bit對應一個數字,如果出現過,那麼flag上這個bit就為1,不然就是0,且用一個32bit的int型足夠容納下所有位。
再回過頭來看程式碼:
// 將1右移numbers[i]位,然後與flag進行按位與運算
// 若flag上的第numbers[i]已為1,說明該位已被佔用,數字重複了,運算的結果大於0,返回false
if(((1 << numbers[i]) & flag) > 0)
return false;
// 通過“或操作”填充flag中不同的二進位制位
flag |= (1 << numbers[i]);
相關文章
- 判斷欄位中是否有漢字
- 陣列中重複的數字陣列
- 檢查陣列中是否有重複項陣列
- 位運算-判斷一個數是否為2的整數次方
- 技術乾貨:如何判斷一個整數陣列是否存在重複元素......陣列
- dataset 判斷整列是否有重複,找出重複資料
- JavaScript 判斷是否是陣列JavaScript陣列
- JZ-050-陣列中重複的數字陣列
- Array · 判斷某元素是否在陣列中陣列
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- [劍之offer] 03 陣列中重複的數字陣列
- 劍指Offer--陣列中重複的數字陣列
- 判斷是否是陣列的幾種方法陣列
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- 判斷一個陣列是否排好序陣列
- 判斷是否為陣列的 JavaScript 方法總結陣列JavaScript
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- postgresql判斷是否為數字的方法SQL
- 判斷字元是否重複正規表示式字元
- JavaScript判斷數字是否是質數JavaScript
- 演算法問題——判斷陣列中是否含有某一字串演算法陣列字串
- #442-Find All Duplicates in an Array-陣列中重複的數字陣列
- [每日一題] 第十九題:陣列中重複的數字每日一題陣列
- Javascript-判斷是否為陣列的5種方法JavaScript陣列
- 向HashSet插入自定義物件判斷是否重複物件
- 寫個方法判斷陣列物件中是否存在某個物件陣列物件
- Go小工具系列——判斷元素是否存在於陣列中Go陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- java判斷輸入的字串是否為數字Java字串
- js如何使用includes()判斷陣列是否含有指定值JS陣列
- 正規表示式判斷是否是數字
- java陣列中重複元素的去重Java陣列
- python如何判斷一列是否有資料Python
- QJsonObject判斷欄位是否存在JSONObject
- 寫一個方法判斷陣列內元素是否全部相同陣列
- 判斷陣列裡面的json 物件是否相等,相等則移除陣列JSON物件
- JS如何判斷一個陣列是否為空、是否含有某個值JS陣列
- Python判斷變數是否是整數的方法有哪些?Python變數
- Java stream判斷列表是否包含某幾個元素/重複元素Java