LeetCode・1262. 3 で割り切れる最大合計・貪欲

著者: Xiao Xun
リンク: https://leetcode.cn/problems/greatest-sum-divisible-by-three/solutions/2314049/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun- r0n76/
出典: LeetCode の著作権は
作者に帰属します。商業的転載の場合は著者に連絡して承認を求め、非商業的転載の場合は出典を明記してください。

トピック

 

一連の考え

タイトル -> 整数配列 nums を指定して、3 で割り切れる要素の最大合計を見つけて返します。

配列には負の数がないため、配列全体の要素の合計 s が 3 で割り切れる場合、s は最大の要素の合計になります。

それ以外の場合、s が 3 で割り切れない場合は、s が 3 で割り切れるように s から nums[i] を減算できるかどうかを確認してください。

nums[i] mod 3=1 のすべての nums[i] を見つけて配列 a1 に入れ、nums[i] mod 3=2 のすべての nums[i] を見つけて配列 a2 に入れます。a1 と a2 を小さいものから大きいものへと並べます。カテゴリディスカッション:

  • s mod 3=1 の場合:
    • a1 が空でない場合、答えは s−a1[0] になる可能性があります。
    • a2 に少なくとも 2 つの数値がある場合、答えは s−a2[0]−a2[1] になる可能性があります。
    • どちらの場合も最大値が採用されます。
    • そのような数値が存在しない場合は 0 を返します。
  • s mod 3=2 の場合:
    • a2 が空でない場合、答えは s−a2[0] になる可能性があります。
    • a1 に少なくとも 2 つの数値がある場合、答えは s−a1[0]−a1[1] となる可能性があります。
    • どちらの場合も最大値が採用されます。
    • そのような数値が存在しない場合は 0 を返します。

コードが実装されるとき、s mod 3=2 の場合、配列 a1 と a2 を交換して同じロジック セットを再利用できます。

コードコメントは非常に詳細です

コード


static int cmp(const void *a, const void *b) {//升序
    return *(int *)a - *(int *)b;
}

int maxSumDivThree(int* nums, int numsSize) {
    int a[3][numsSize];
    memset(a, 0, sizeof(a));
    int i = 0, j = 0, sum = 0;//初始化
    for (int m = 0; m < numsSize; ++m) {//枚举所有元素
        sum += nums[m];//统计元素和
        if (nums[m] % 3 == 1) {//保存当前元素的余数
            a[nums[m] % 3][i++] = nums[m];
        } else if (nums[m] % 3 == 2) {
            a[nums[m] % 3][j++] = nums[m];
        }
    }
    if (sum % 3 == 0) return sum;//正好完成整除
    qsort(a[1], i, sizeof(a[1][0]), cmp);
    qsort(a[2], j, sizeof(a[2][0]), cmp);//升序
    int *a1 = a[1], *a2 = a[2];//指针交换位置非常方便
    if (sum % 3 == 2) {//情况二,交换指针
        a1 = a[2];
        a2 = a[1];
        int temp = i; 
        i = j;
        j = temp;
    }

    int ans = i == 0 ? 0 : sum - a1[0];//情况一判断
    if (j > 1) ans = fmax(ans, sum - a2[0] - a2[1]);//情况二判断
    return ans;
}


作者:小迅
链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three/solutions/2314049/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-r0n76/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

おすすめ

転載: blog.csdn.net/m0_64560763/article/details/131287162