当前位置: 首页 > news >正文

力扣1862.向下取整数对和

力扣1862.向下取整数对和

  • 前缀和 + 公式推导

    • 对于floor函数,**[0,i-1] [i,i×2-1] [i×2,i×3-1] [i×3,i×4-1] …[i×(j-1),i×j-1]**的区间内floor值相同
    • 对于每个元素i,每次找区间内元素个数y,以及元素i的个数x
    • 得到res += y * x * (j / i)
  •   class Solution {const int N = 1e9+7;long num[100010];public:int sumOfFlooredPairs(vector<int>& nums) {long long res = 0;int n = nums.size(),maxx=0;//找最大值(上限)for(int i=0;i<n;i++)maxx = max(maxx,nums[i]);//记录每个元素出现次数(元素最大值10w,较小)for(int i=0;i<n;i++)num[nums[i]] ++;//求前缀和for(int i=1;i<=maxx;i++)num[i] += num[i-1];for(int i=1;i<=maxx;i++){//元素i的个数xlong x = num[i] - num[i-1];if(x == 0) continue;//遍历倍数j,每次+=i,跳到下一个区间for(int j=i;j<=maxx;j+=i){//这个区间的元素个数ylong y = num[min(j+i-1,maxx)] - num[j-1];res = (res + (j/i)*y*x)%N;}}return (int)res;}};
    

http://www.mrgr.cn/news/11636.html

相关文章:

  • layui栅格布局设置列间距不起作用
  • DRF——Filter条件搜索模块
  • 在银河麒麟服务器V10上源码编译安装mysql-5.7.42-linux-glibc2.12-x86_64
  • 【Linux】冯诺依曼体系|操作系统概念
  • 前端技巧——iframe + postMessage进行页面通信
  • ECMAScript 6 基础
  • 什么是数据分析,企业数据分析的流程是什么?
  • IO进程线程 0827作业
  • 计算机网络-2-tcpip协议
  • npm阿里云制品仓库
  • 【笛卡尔积】深入理解笛卡尔积及其在SQL中的应用
  • React多功能管理平台项目开发全教程
  • 第三十二天学习笔记
  • EmguCV学习笔记 VB.Net 6.3 轮廓外接多边形
  • 关于多参数/排列组合的结果分配
  • 【LLM之Data】SKYSCRIPT-100M论文阅读笔记
  • 测试使用--
  • 日志排查——linux
  • Spring Boot如何压缩Json并写入redis?
  • GDB基础指令分类与汇总