利用位運算判斷陣列中是否有重複的數字
討論這個主題的來由是《劍指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]);
相關文章
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列
- 陣列中重複的數字陣列
- 檢查陣列中是否有重複項陣列
- 判斷表中資料是否有重複
- 技術乾貨:如何判斷一個整數陣列是否存在重複元素......陣列
- dataset 判斷整列是否有重複,找出重複資料
- JZ-050-陣列中重複的數字陣列
- 刪除排序陣列中的重複數字排序陣列
- JavaScript 判斷是否是陣列JavaScript陣列
- Array · 判斷某元素是否在陣列中陣列
- jquery判斷元素是否存在於陣列中jQuery陣列
- 劍指Offer--陣列中重複的數字陣列
- [劍之offer] 03 陣列中重複的數字陣列
- 《劍指offer》:[51]陣列中的重複數字陣列
- golang中判斷兩個slice是否相等與判斷值下的 陣列是否相等Golang陣列
- SQL 判斷欄位是否以數字開頭或者包含數字SQL
- js如何判斷一個引數是否是陣列JS陣列
- 判斷是否是陣列的幾種方法陣列
- 判斷元素是否有重疊部分
- js如何判斷陣列中是否含有某個元素JS陣列
- 判斷一個陣列是否排好序陣列
- JavaScript判斷陣列是否包含指定元素JavaScript陣列
- js如何刪除陣列中是否有重複內容程式碼JS陣列
- postgresql判斷是否為數字的方法SQL
- JavaScript判斷數字是否是質數JavaScript
- 判斷字元是否重複正規表示式字元
- [每日一題] 第十九題:陣列中重複的數字每日一題陣列
- #442-Find All Duplicates in an Array-陣列中重複的數字陣列
- 判斷是否為陣列的 JavaScript 方法總結陣列JavaScript
- js如何判斷陣列是否含有指定的元素JS陣列
- 演算法問題——判斷陣列中是否含有某一字串演算法陣列字串
- js判斷一個物件是否為陣列JS物件陣列
- JavaScript 判斷陣列或者物件是否為空JavaScript陣列物件
- js如何判斷陣列中是否存在指定的值並返回索引JS陣列索引
- js判斷引數是否為非數字JS
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 向HashSet插入自定義物件判斷是否重複物件