トピック
赤、白、青を含むn個の要素の配列が与えられた場合、同じ色の要素が隣接し、赤、白、青の順序で配置されるように、それらを所定の位置に並べ替えます。
この質問では、整数0、1、および2を使用して、それぞれ赤、白、および青を表します。
例1:
入力:nums = [2,0,2,1,1,0]
出力:[0,0,1,1,2,2]
例2:
入力:nums = [2,0,1]
出力:[0,1,2]
例3:
入力:nums = [0]
出力:[0]
例4:
入力:nums = [1]
出力:[1]
促す:
n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2
ソース:LeetCode
問題解決
テンプレート
void sortColors(int* nums, int numsSize){
}
分析
別の考え方の理解によると、この質問は色をできるだけ近くに配置するために赤、白、青の順序を要求し、この順序はたまたま012の順序であるため、次の質問を簡単に理解できます。これは、必要に応じて配列要素を配置することを意味します。これにより、要素の順序で配列要素を配置し、問題の要件を満たすために可能な限り互いに近づけることもできます。
元のコード
int cmp(int *a, int *b) {
return *a - *b;
}
void sortColors(int* nums, int numsSize){
qsort(nums, numsSize, sizeof(int), cmp);
return nums;
}
qsortはC言語のソート関数であり、配列分割のトピックでも使用されています。興味がある場合は、qsort()の簡単な使用法の概要をご覧ください。