zoukankan      html  css  js  c++  java
  • 【leetcode】561. 数组拆分 I

    /*C语言*/
    int cmp(const void* a,const void* b){
        return *(int*)a>*(int*)b;
    }
    int arrayPairSum(int* nums, int numsSize){
        int sum=0, i;
        qsort(nums,numsSize,sizeof(int),cmp);
        for(i=0; i<numsSize; i++)
            if(i%2 == 0)
                sum += nums[i];
        return sum;
    }
    //JAVA
    public class Solution {
        public int arrayPairSum(int[] nums) {
            int[] arr = new int[20001];
            int lim = 10000;
            for (int num: nums)
                arr[num + lim]++;
            int d = 0, sum = 0;
            for (int i = -10000; i <= 10000; i++) {
                sum += (arr[i + lim] + 1 - d) / 2 * i;
                d = (2 + arr[i + lim] - d) % 2;
            }
            return sum;
        }
    } 
    /*
    for(int i = -10000; i <= 10000; i++ ){
                int count = arr[i + lim];
                if(count != 0){
                    //count + 1是为了让奇数在/2时能向上取整
                    //如果d是1, 也就说明这个数的个数被上一次分配占用了一个, 对偶数没有影响
                    //但是对奇数, 因为少了一个, 所以还剩偶数个, 所以需要再-d, 实质就是-1, 否则会多分配一对
                    sum += (count + 1 - d) / 2 * i;
                    //d就是用来说明这次分配有没有占用下个数的个数, 如果有, 则置1
                    //要-d是因为要考虑上次分配有没有占用这次的个数, 如果占用了, 那就-1, 也就是-d
                    //+2是因为  防止count == 1 || count == 0
                    d = (count - d + 2) & 1;
                }
            }
    */
  • 相关阅读:
    「POJ 2699」The Maximum Number of Strong Kings
    「HNOI 2013」切糕
    「PKUSC 2018」真实排名
    「国家集训队 2009」最大收益
    「TJOI2015」线性代数
    「BZOJ 3280」小R的烦恼
    「SDOI 2017」新生舞会
    「六省联考 2017」寿司餐厅
    「TJOI 2013」循环格
    「TJOI 2013」攻击装置
  • 原文地址:https://www.cnblogs.com/ganxiang/p/14071919.html
Copyright © 2011-2022 走看看