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

C语言 | Leetcode C语言题解之第493题翻转对

题目:

题解:

int lowbit(int x) {return x & (-x);
}void update(int* tree, int treeSize, int x, int d) {while (x <= treeSize) {tree[x] += d;x += lowbit(x);}
}int query(int* tree, int x) {int ans = 0;while (x) {ans += tree[x];x -= lowbit(x);}return ans;
}int cmp(void* _a, void* _b) {long long a = *((long long*)_a), b = *((long long*)_b);return a < b ? -1 : 1;
}int lower_bound(long long* a, int aSize, long long target) {int left = 0, right = aSize;while (left < right) {int mid = (left + right) / 2;if (a[mid] < target) {left = mid + 1;} else {right = mid;}}return left;
}int discrete(int* nums, int numsSize, int* ret) {long long rec[numsSize * 2];for (int i = 0; i < numsSize; i++) {rec[i * 2] = nums[i], rec[i * 2 + 1] = (long long)nums[i] * 2;}qsort(rec, numsSize * 2, sizeof(long long), cmp);int retSize = 0;for (int i = 0; i < numsSize * 2; i++) {if (retSize == 0 || rec[retSize - 1] != rec[i]) {rec[retSize++] = rec[i];}}for (int i = 0; i < numsSize; i++) {ret[i * 2] = lower_bound(rec, retSize, nums[i]) + 1;ret[i * 2 + 1] = lower_bound(rec, retSize, (long long)nums[i] * 2) + 1;}return retSize;
}int reversePairs(int* nums, int numsSize) {if (numsSize == 0) {return 0;}int values[numsSize * 2];int valuesSize = discrete(nums, numsSize, values);int ret = 0;int tree[valuesSize + 2];memset(tree, 0, sizeof(tree));for (int i = 0; i < numsSize; i++) {int left = values[i * 2 + 1], right = valuesSize + 1;ret += query(tree, right) - query(tree, left);update(tree, valuesSize + 1, values[i * 2], 1);}return ret;
}

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

相关文章:

  • [实时计算flink]DataStream连接器设置方法
  • 骑砍霸主MOD天芒传奇Ⅱ·前传-序章
  • Cuda By Example - 8 (性能测量)
  • ChatGPT的150个角色提示场景实测(17)营养师
  • 一天认识一个硬件之路由器
  • MobaXterm 中文乱码
  • 22 linux 进程管理进程间通信
  • 【JAVA毕业设计】基于Vue和SpringBoot的图书个性化推荐系统
  • pip安装sentence-transformers时的一些报错记录以及Python汉字转拼音cleverdeng/pinyin.py程序的调整处理
  • 高效实现Python机器学习:超参数优化中的网格搜索与随机搜索详解
  • 城市发展指数-基于滴滴平台数据测算
  • C++ 数组、递归两种方式实现二分查找
  • 安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析
  • Python无监督学习中的聚类:K均值与层次聚类实现详解
  • 【厦门大学附属第一医院(互联网医院)-注册安全分析报告-无验证方式导致安全隐患】
  • 大模型量化感知训练 LLM-QAT
  • 深度学习框架-Keras的常用内置数据集总结
  • 妇女、商业与法律(WBL)(1971-2023年)
  • 理解ADC:信噪比SNR的天花板是什么?附带介绍一下ENOB
  • C++——定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法。参加运算的两个操作数可以都是类对象,也可以一个是整数,其顺序任意。