2341. 配列は何組形成できますか?
0 から始まるインデックスを持つ整数配列 nums が与えられます。1 つのステップで次の手順を実行できます。
从 nums 选出 两个 相等的 整数
从 nums 中移除这两个整数,形成一个 数对
続行できなくなるまで、この操作を nums に対して複数回実行してください。
0 から始まり長さ 2 の整数配列を答えとして返します。answer[0] は形成されたペアの数、answer[1] は nums に対して上記の操作をできるだけ多く実行した後に残る整数の数です。 。
例 1:
入力: nums = [1,3,2,1,3,2,2]
出力: [3,1]
説明:
nums[0] と nums[3] は数値ペアを形成し、nums から削除されます。 nums = [ 3,2,3,2,2] 。
nums[0] と nums[2] は数値ペアを形成し、nums (nums = [2,2,2]) から削除されます。
nums[0] と nums[1] は数値ペアを形成し、nums、nums = [2] から削除されます。
これ以上ペアを形成することはできません。合計 3 つの数字のペアが形成され、nums に 1 つの数字が残ります。
例 2:
入力: nums = [1,1]
出力: [1,0]
説明: nums[0] と nums[1] は数値ペアを形成し、nums, nums = [] から削除されます。
これ以上ペアを形成することはできません。合計 1 つの数値ペアが形成され、nums には 0 の数値が残ります。
例 3:
入力: nums = [0]
出力: [0,1]
説明: 数値のペアを形成できません。nums には 1 つの数値が残っています。
この質問は比較的単純で、解決策のコードは次のとおりです。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* numberOfPairs(int* nums, int numsSize, int* returnSize){
int count[101];
int * re=(int *)malloc(sizeof(int)*2);
*returnSize=2;
for(int i=0;i<101;i++){
count[i]=0;
}
re[0]=0;
re[1]=0;
for(int i=0;i<numsSize;i++){
count[nums[i]]++;
if(count[nums[i]]==2){
re[0]++;
re[1]--;
count[nums[i]]=0;
}
if(count[nums[i]]==1){
re[1]++;
}
}
return re;
}