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

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

题目:

题解:

type fenwick struct {
    tree []int
}

func newFenwickTree(n int) fenwick {
    return fenwick{make([]int, n+1)}
}

func (f fenwick) add(i int) {
    for ; i < len(f.tree); i += i & -i {
        f.tree[i]++
    }
}

func (f fenwick) sum(i int) (res int) {
    for ; i > 0; i &= i - 1 {
        res += f.tree[i]
    }
    return
}

func reversePairs(nums []int) (cnt int) {
    n := len(nums)
    if n <= 1 {
        return
    }

    // 离散化所有下面统计时会出现的元素
    allNums := make([]int, 0, 2*n)
    for _, v := range nums {
        allNums = append(allNums, v, 2*v)
    }
    sort.Ints(allNums)
    k := 1
    kth := map[int]int{allNums[0]: k}
    for i := 1; i < 2*n; i++ {
        if allNums[i] != allNums[i-1] {
            k++
            kth[allNums[i]] = k
        }
    }

    t := newFenwickTree(k)
    for i, v := range nums {
        // 统计之前插入了多少个比 2*v 大的数
        cnt += i - t.sum(kth[2*v])
        t.add(kth[v])
    }
    return
}

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

相关文章:

  • 京准电钟解读:NTP网络对时服务器助力厂区改造方案
  • 经典功率谱估计的原理及MATLAB仿真(自相关函数BT法、周期图法、bartlett法、welch法)
  • 忘记7-zip文件7-zip文件,还可以解压zip文件吗?
  • iPhone当U盘使用的方法 - iTunes共享文件夹无法复制到电脑怎么办 - 如何100%写入读出
  • 人工智能:未来生活与工作的变革力量
  • 股票与基金资料收集
  • 使用 PyTorch 构建 LSTM 股票价格预测模型
  • 海外发稿:大舍传媒-媒体宣发Vents Magazine女性杂志展现独特魅力与价值
  • Windows里python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
  • Kafka 为什么要抛弃 Zookeeper?
  • 政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行
  • 统一多模态大模型!PUMA:多粒度策略笑傲图像生成、编辑、修复、着色和条件图像生成和理解六大任务
  • 正则表达式快速入门
  • 【Orange Pi 5 Linux 5.x 内核编程】-字符设备文件与创建
  • C++中extern的作用(面试)
  • 【网络安全】护网蓝队之应急响应
  • OracleT5-2 Solaris11安装
  • 使用JMeter进行Spring Boot接口的压力测试
  • Linux运维常见问题排查
  • wordcloud分词生成
  • c#————FieldInfo的基础使用
  • 鸿蒙网络编程系列33-TLS回声服务器示例
  • 音频编解码器音频文件格式
  • 数字图像处理的概念(二)
  • 基于SpringBoot+Vue+uniapp微信小程序的文玩销售小程序的详细设计和实现
  • 如何使用 Ngrok 将本地服务暴露到公网