LeetCode 1497. 檢查數(shù)組對是否可以被k整除

題意:給你一個整數(shù)數(shù)組 arr 和一個整數(shù) k ,其中數(shù)組長度是偶數(shù),值為 n 。

現(xiàn)在需要把數(shù)組恰好分成 n /?2 對,以使每對數(shù)字的和都能夠被 k 整除。

如果存在這樣的分法,請返回 True ;否則,返回 False 。


思路:用一個map記下模后值為x的所有數(shù)的個數(shù)。然后遍歷數(shù)組,每次找到與它配對的值,map對應的值減1。這里需要注意的是負數(shù)的取模,直接用c++的取模運算得到的結(jié)果不符合題意,所以對于負數(shù)取模重新算一下。a%b = a - 向下取整(a/b) * b;


C++代碼:

class?Solution?{

public:

????map<int,?int>?mp;

????bool?canArrange(vector<int>&?arr,?int?k)?{

????????sort(arr.begin(),?arr.end());

????????for(int?i?=?0;?i?<?arr.size();?i++){

????????????int?tmp?=?arr[i]?%?k;

????????????if(arr[i]?<?0){

????????????????if(arr[i]?/?k?*?k?==?arr[i])?tmp?=?arr[i]?-?arr[i];

????????????????else?tmp?=?arr[i]?-?(arr[i]?/?k?-?1)?*?k;

????????????}

????????????mp[tmp]++;

????????}

????????for(int?i?=?0;?i?<?arr.size();?i++){

????????????int?tmp?=?arr[i]?%?k;

????????????if(arr[i]?<?0){

????????????????if(arr[i]?/?k?*?k?==?arr[i])?tmp?=?arr[i]?-?arr[i];

????????????????else?tmp?=?arr[i]?-?(arr[i]?/?k?-?1)?*?k;

????????????}

????????????if(mp[tmp]?==?0)?continue;

????????????mp[tmp]--;

????????????if(tmp?==?0)?tmp?=?k;

????????????if(mp.find(k?-?tmp)?==?mp.end()?||?mp[k?-?tmp]?==?0){

????????????????return?false;

????????????}

????????????else?if(mp.find(k?-?tmp)?!=?mp.end())?mp[k?-?tmp]--;

????????}

????????return?true;

????}

};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容