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

Java | Leetcode Java题解之第493题翻转对

题目:

题解:

class Solution {
    public int reversePairs(int[] nums) {
        Set<Long> allNumbers = new TreeSet<Long>();
        for (int x : nums) {
            allNumbers.add((long) x);
            allNumbers.add((long) x * 2);
        }
        // 利用哈希表进行离散化
        Map<Long, Integer> values = new HashMap<Long, Integer>();
        int idx = 0;
        for (long x : allNumbers) {
            values.put(x, idx);
            idx++;
        }

        int ret = 0;
        BIT bit = new BIT(values.size());
        for (int i = 0; i < nums.length; i++) {
            int left = values.get((long) nums[i] * 2), right = values.size() - 1;
            ret += bit.query(right + 1) - bit.query(left + 1);
            bit.update(values.get((long) nums[i]) + 1, 1);
        }
        return ret;
    }
}

class BIT {
    int[] tree;
    int n;

    public BIT(int n) {
        this.n = n;
        this.tree = new int[n + 1];
    }

    public static int lowbit(int x) {
        return x & (-x);
    }

    public void update(int x, int d) {
        while (x <= n) {
            tree[x] += d;
            x += lowbit(x);
        }
    }

    public int query(int x) {
        int ans = 0;
        while (x != 0) {
            ans += tree[x];
            x -= lowbit(x);
        }
        return ans;
    }
}

http://www.kler.cn/news/355607.html

相关文章:

  • Midjourney中文版:开启AI绘画新时代
  • 基于SSM出租车管理系统的设计
  • nodejs 实现linux 磁盘挂载 磁盘健康检测(smartmontools) 系统内存cpu性能监控
  • windows C++-有效使用PPL(三)
  • 力扣 简单 141.环形链表
  • Miniconda管理虚拟环境【Python环境配置】
  • 【JS、数组】flat的基本用法
  • 开源vGPU方案 HAMi实现细粒度GPU切分——筑梦之路
  • 观测云 AI 助手上线:智能运维,从此触手可及!
  • 使用软件模拟按键显示屏,上下左右确认取消按键,来修改IP端口号等参数。
  • Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2
  • rk3588 opencv 的使用
  • Android 编译时出现Android resource linking failed.without required default value.
  • perl读取目录,写入文件
  • 高校企业数据可视化平台功能介绍/特色功能
  • 骑砍霸主MOD天芒传奇Ⅱ·前传-序章
  • 压缩感知解谱
  • EI会议将截稿|第三届环境工程与与可持续能源国际会议(EESE 2024)
  • Git常用操作
  • 国家计算机二级MSOffice计算机选择题题库汇总精选