zoukankan      html  css  js  c++  java
  • 1862. 向下取整数对和

    先从小到大排序

    对每个nums[i],sum += 1,表示自己除自己为1

    一、

    令p = i + 1,q = 第一个大于等于nums[i]的数的下标,则q - p为与nums[i]相等的数的个数,

    sum += (q - p)* 2,因为我们只考虑 5 / 2,而不用考虑2 / 5,但若有两个5,则必须考虑$5_1 / 5_2,5_2 / 5_1$

    所以要*2

    二、

    之后令q = p,令ans = 1,每次令q = 第一个大于等于nums[i] * (ans + 1)的数的下标,则(q - p)即为有(q - p)个数除nums[i] = ans

    sum += (q - p)* ans;

    ans++;

    直到ans * nums[i] 大于 最大值,则i++,继续下一个nums

    每次记录一中的值和二中的值,如果第i + 1个数与第i个相同,则可以重复使用

    class Solution {
    public:
        int vis[100010];
        bool vis1[100010];
        set<int> ss;
        int mod = 1e9 + 7;
        int sumOfFlooredPairs(vector<int>& nums) {
            memset(vis, 0, sizeof(vis));
            memset(vis1, 0, sizeof(vis1));
            // vector<int> NUM;
            int n = nums.size();
            int max_v = -1;
            for(int i = 0; i < n; i++)
            {
                vis[nums[i]]++;
                max_v = max(max_v, nums[i]);
                // ss.insert(nums[i]);
            }
            sort(nums.begin(), nums.end());
            int sum = 0, cnt = 0, pre_same, pre_nosame;
            
            for(int i = 0; i < n; i++)
            {
                sum = (sum + 1) % mod;
                if(i > 0 && nums[i] == nums[i - 1])
                {
                    pre_same--;
                    sum = (sum + pre_same * 2 % mod) % mod;
                    sum = (sum + pre_nosame) % mod;
                    continue;
                }
                pre_nosame = 0;
                int ans = 1, p = i + 1, q;
                q = upper_bound(nums.begin(), nums.end(), nums[i]) - nums.begin();
                sum  = (sum + (q - p) * 2 % mod) % mod;
                pre_same = q - p;
                p = q;
                while(i < n - 1 && (nums[i]) * ans <= max_v)
                {
                    q = lower_bound(nums.begin(), nums.end(), nums[i] * (ans + 1)) - nums.begin();
                    sum = (sum + (((q - p) * ans) % mod) ) % mod;
                    pre_nosame = (pre_nosame + (q - p) * ans % mod) % mod;
                    ans++;
                    p = q;
                }
    
            }
    
    
            return sum;
    
    
    
        }
    };
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    多多挣钱,多多攒钱。
    平安鸿运英才少儿教育金保障计划
    沙河订奶
    排序算法--参考
    《程序设计基础》考试大纲 复习-C语言
    There is no Action mapped for namespace [/demo1] and action name [doLogin] associated with context path [/SSO_same_domain]
    Android报错 The connection to adb is down, and a severe error has occured.
    解析库beautifulsoup
    request模块使用
    爬虫基本原理
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15585344.html
Copyright © 2011-2022 走看看