class Solution {
public:
/*
* @param A: An integer array
* @param queries: The query list
* @return: The number of element in the array that are smaller that the given integer
*/ vector<int> countOfSmallerNumber(vector<int> A, vector<int> queries) {
// write your code here
vector<int> ans;
sort(A.begin(), A.end());
for(int i = ; i < queries.size(); ++i){
int tmp = lower_bound(A.begin(), A.end(), queries[i]) - A.begin();
ans.push_back(tmp);
}
return ans;
} };

二分查找的方法

/*
把A数组各个数字出现的次数放进线段树里,然后每次查询 0到A[i] - 1的个数,就是小于A[i]的个数
*/
class Solution {
public:
/*
* @param A: An integer array
* @param queries: The query list
* @return: The number of element in the array that are smaller that the given integer
*/
//const int inf = -0x3f3f3f3f;
class SegmentTree{
public:
SegmentTree* left;
SegmentTree* right;
int start;
int end;
int sum;
SegmentTree(int start, int end, int sum){
this -> start = start;
this -> end = end;
this -> left = NULL;
this -> right = NULL;
this -> sum = sum;
}
};
int build(SegmentTree* &root, int left, int right, vector<int> &st){
if(left > right) return ;
root -> start = left;
root -> end = right; if(left == right) root -> sum = st[left];
else {
int mid = (left + right) / ;
root -> left = new SegmentTree(left, mid, );
root -> right = new SegmentTree(mid+, right, );
root -> sum = build(root -> left, left, mid, st) + build(root -> right, mid + , right, st);
}
return root -> sum;
}
int query(SegmentTree* &root, int left, int right){
if(root == NULL || left > right) return ;
if(left <= root -> start && root -> end <= right){
return root -> sum;
} int mid = (root -> start + root -> end) / ;
if(left > mid){
return query(root -> right, left, right);
} else if(right <= mid){
return query(root -> left, left, right);
} else {
return query(root -> left, left, mid) + query(root -> right, mid+, right);
} }
vector<int> countOfSmallerNumber(vector<int> A, vector<int> queries) {
// write your code here
vector<int> ans;
if(A.size() == ){
for(int i = ; i < queries.size(); ++i){
ans.push_back();
}
return ans;
}
sort(A.begin(), A.end());
vector<int> st;
st.resize(A[A.size() - ] + , );
for(int i = ; i < A.size(); ++i){
st[A[i]] += ;
}
SegmentTree* root = new SegmentTree(, , );
build(root, , A[A.size() - ], st);
for(int i = ; i < queries.size(); ++i){
int tmp = query(root, , queries[i] - );
ans.push_back(tmp);
}
delete(root);
return ans;
} };

线段树

lintcode - 统计比给定整数小的数的个数(两种方法)的更多相关文章

  1. lintcode-248-统计比给定整数小的数的个数

    248-统计比给定整数小的数的个数 给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返 ...

  2. Lintcode---统计比给定整数小的数的个数

    给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返回该数组中小于给定整数的元素的数量. ...

  3. 小程序渲染html的两种方法

    一.使用文档自带的原生API  rich-text, nodes属性直接绑定需要渲染的html内容即可,文档参见这里:https://developers.weixin.qq.com/miniprog ...

  4. 求序列A中每个数的左边比它小的数的个数(树状数组)

    给定一个有N个正整数的序列A(N<=10^5,A[i]<=10^5),对序列中的每一个数,求出序列中它左边比它小的数的个数. 思路:树状数组的经典应用(裸题) #include <i ...

  5. C#统计给定的文本中字符出现的次数,使用循环和递归两种方法

    前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...

  6. hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数

    Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. jmeter--参数化的四种方法

    本文转自:http://www.cnblogs.com/imyalost/p/6229355.html 参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来 ...

  8. c语言实现两数交换的三种方法

    实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变 ...

  9. HBase统计表行数(RowCount)的四种方法

    背景:对于其他数据存储系统来说,统计表的行数是再基本不过的操作了,一般实现都非常简单:但对于HBase这种key-value存储结构的列式数据库,统计 RowCount 的方法却有好几种不同的花样,并 ...

随机推荐

  1. spring-初始化bean

    @EnableScheduling@Servicepublic class BaseTask implements InitializingBean, ApplicationContextAware{ ...

  2. Django的Model使用

    创建模型 使用Django的模型主要注意两个方面:字段的类型和方法的重写.这里用一个例子来说明,其中包含了常用的字段类型和如何重写方法. from django.db import models cl ...

  3. git 本地代码到github(转)

    git 本地代码到github   一·什么是gitHub? 官网解释:gitHub是一个让无论处于何地的代码工作者能工作于同一个项目,同一个版本的平台.(GitHub is a code hosti ...

  4. Codeforces 1110D Jongmah (DP)

    题意:你有n个数字,范围[1, m],你可以选择其中的三个数字构成一个三元组,但是这三个数字必须是连续的或者相同的,每个数字只能用一次,问这n个数字最多构成多少个三元组? 解析:首先我们容易发现,我们 ...

  5. MSScriptControl详解(可实现在C#等语言中调用JAVASCRIPT代码)

    ScriptControl接口 属性名称 类型 备注 AllowUI BOOL 检测是否允许运行用户的接口元素.如果为False,则诸如消息框之类的界面元素不可见. CodeObject Object ...

  6. UITableView(可滚动到顶部和底部)

    #import "RootViewController.h" #define width [UIScreen mainScreen].bounds.size.width #defi ...

  7. R: 关于 ggplot2 的初探

    生活还很长,别急,慢慢来.亲爱的 require(ggplot2)p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() ; p1p1 + scale ...

  8. RowGame TopCoder - 10664

    传送门 分析 首先不难想到O(k)做法,即dpi表示进行了几次,但复杂度明显爆炸,所以思考更优做法.我们发现数字个数很小,仅为可怜的50,所以从这里找突破口.我们发现每次可以在一个固定区域内进行刷分活 ...

  9. 移动应用中的AR开发,5款最受欢迎工具推荐!

      英文原文:Top 5 Tools for Augmented Reality in Mobile Apps 还记得前段时间在网上很火的 3D 小熊不?托它的福,为相当一部分人科普了增强现实(AR) ...

  10. linux环境安装python

    linux环境下安装python3,一步一步来吧! 安装python3 安装readline-devel依赖 ,用于解决python3安装完成后,退格和方向键乱码问题 yum install read ...