元素守恒计算方法_树状数组求逆序对

元素守恒计算方法_树状数组求逆序对给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入:nums = [5,2,6,1]输出:[2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1)2 的右侧仅有 1 个更小的元素 (1)6 的右侧有 1 个更小的元素 (1)1 的右侧有 0 个更小的元素提示:0 <= nums.length <= 10^5-10^4

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。

示例:

输入:nums = [5,2,6,1]
输出:[2,1,1,0] 
解释:
5 的右侧有 2 个更小的元素 (2 和 1)
2 的右侧仅有 1 个更小的元素 (1)
6 的右侧有 1 个更小的元素 (1)
1 的右侧有 0 个更小的元素

提示:

0 <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4

题解
树状数组求逆序数

class Solution { 
   
public:
    static const int N = 1e5 + 10;
    int lowbit(int x){ 
   
        return (x & (-x));
    }
    int query(int x){ 
   
        int sum = 0;
        while(x > 0){ 
   
            sum += tree[x];
            x -= lowbit(x);
        }
        return sum;
    }
    void add(int x,int y){ 
   
        while(x < N){ 
   
            tree[x] += y;
            x += lowbit(x);
        }
    }
    int tree[N] = { 
   0};

    vector<int> countSmaller(vector<int>& nums) { 
   
        vector<int>res;
        int base = 1e4 + 1;
        for(int i = nums.size() - 1;i >= 0;i --){ 
   
            nums[i] = nums[i] + base;
            res.push_back(query(nums[i] - 1));
            add(nums[i],1);
        }
        reverse(res.begin(),res.end());
        return res;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169134.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python读取图片属性信息

    python读取图片属性信息从照片里面获取GPS信息。可交换图像文件常被简称为EXIF(Exchangeableimagefileformat),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据,EXIF信息不支持png,webp等图片格式。Python中使用ExifRead包读取图片的属性信息,安装方式为:pipinstallexifread使用exifread.process_file获取图像的信息:img_path=r”b…

    2022年9月12日
    0
  • SpringBoot声明式事务的简单运用

    SpringBoot声明式事务的简单运用关于事物的基本概念等这里就不介绍了。Spring声明式事物的实现,有两种方式;第一种是配置xml,第二种是使用相关注解(这两种方式可详见《程序员成长笔记(一)》的相关章节)。SpringBoot中默认配置了第二种方式,所以,SpringBoot直接使用注解即可。下面介绍SpringBoot通过注解开启事物的使用。SpringBoot使用事物的步骤:第一步:在启动类上开启…

    2022年5月30日
    33
  • MySQL数据库:存储过程Procedure

    MySQL数据库:存储过程Procedure

    2021年10月4日
    58
  • 肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)「建议收藏」

    肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)「建议收藏」不好意思久等了这篇文章让小伙伴们久等了。一年多以来,关于嵌入式开发学习路线、规划、看什么书等问题,被问得没有一百,也有大几十次了。但是无奈自己对这方面了解有限,所以每次都没法交代,搞得实在不好意思。但是办法总归是有的,正如前篇文章《最近厚着脸皮联系了不少老同学》所聊,虽然我自己不从事这些方向,但寻思了一下,我的同学和朋友中,多少还是有一些从事相关方向并且在一线(或曾在一线)工作过的,所以我就请他们帮忙一起梳理这几个我不熟悉领域的学习路线,这次嵌入式开发就是其中之一。这篇文章之所以拖这么久,因为沟..

    2022年6月11日
    22
  • Java中常见的类加载器及双亲委派机制的原理

    相信不少的同学在面试的时候会被问到一个词:双亲委派,懂得同学懂,不懂的同学可能会尴尬一笑,那么今天咱们就来聊聊这个问题的原理,首先我们需要了解一下java中常见的几种类加载器。一、Java中常见的类加载器1.BootstrapClassLoader纯C++实现的类加载器,没有对应的Java类,主要加载的是jre/lib/目录下的核心库2.ExtClassLoader类的全名是…

    2022年4月9日
    28
  • Spring Boot教程(十三):Spring Boot文件上传「建议收藏」

    Spring Boot教程(十三):Spring Boot文件上传「建议收藏」一、创建一个简单的包含WEB依赖的SpringBoot项目pom.xml内容:&lt;!–SpringBootweb启动器–&gt;&lt;dependency&gt;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&lt;artifactId&gt;spring-boot-starter-…

    2022年6月14日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号