lintcode - 统计比给定整数小的数的个数(两种方法)
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 - 统计比给定整数小的数的个数(两种方法)的更多相关文章
- lintcode-248-统计比给定整数小的数的个数
248-统计比给定整数小的数的个数 给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返 ...
- Lintcode---统计比给定整数小的数的个数
给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表.对于每一个查询,将会给你一个整数,请你返回该数组中小于给定整数的元素的数量. ...
- 小程序渲染html的两种方法
一.使用文档自带的原生API rich-text, nodes属性直接绑定需要渲染的html内容即可,文档参见这里:https://developers.weixin.qq.com/miniprog ...
- 求序列A中每个数的左边比它小的数的个数(树状数组)
给定一个有N个正整数的序列A(N<=10^5,A[i]<=10^5),对序列中的每一个数,求出序列中它左边比它小的数的个数. 思路:树状数组的经典应用(裸题) #include <i ...
- C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
前几天看了一个.net程序员面试题目,题目是”统计给定的文本中字符出现的次数,使用循环和递归两种方法“. 下面是我对这个题目的解法: 1.使用循环: /// <summary> /// 使 ...
- hdu 2838 Cow Sorting 树状数组求所有比x小的数的个数
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- jmeter--参数化的四种方法
本文转自:http://www.cnblogs.com/imyalost/p/6229355.html 参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来 ...
- c语言实现两数交换的三种方法
实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变 ...
- HBase统计表行数(RowCount)的四种方法
背景:对于其他数据存储系统来说,统计表的行数是再基本不过的操作了,一般实现都非常简单:但对于HBase这种key-value存储结构的列式数据库,统计 RowCount 的方法却有好几种不同的花样,并 ...
随机推荐
- HTML标签详细讲解
http://www.cnblogs.com/yuanchenqi/articles/5603871.html
- 第5章 使用MUI与H5+构建移动端app
H5+是JS封装的工具集合,通过H5+我们就可以使用JS的方式去调用到我们手机端上的一些原生的组件. http://dev.dcloud.net.cn/mui/ http://dev.dcloud.n ...
- spring----AOP注解以及spring的JDBC和事务
技术分析之:Spring框架的AOP技术(注解方式) 1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开 ...
- linux 内核移植和根文件系统的制作
1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1 Linux版本 Linux内核的版本号 ...
- JavaWeb_静态导入、自动拆箱/装箱
静态导入用于简化程序对类静态属性和方法的调用. 语法 import static 包名.类名.静态属性|静态方法|* 例如 import static java.lang.System.out imp ...
- 二维码的生成细节和原理 -- 转http://news.cnblogs.com/n/191671/
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...
- java 删除文件夹中的所有文件及文件夹
删除文件夹(前提:文件夹为空以及InputStream和OutputStream等一些数据文件流关掉[close()],否则文件无法删除) //删除文件夹 public static void del ...
- 从一个xaml文件获取xaml内容,遍历寻找对象
- Fragment之间通过add切换时的显示与隐藏
新手,不知道用什么方法实现 ,通过动态的方法显示了Fragment A,在这个里面点击列表项时add方法动态加载Fragment B,但是两者都会一起显示,重叠在一起了,如果用replace方法 ...
- Service Fabric 注意事项
1. ActorTimer和ActorReminder会阻塞一个Actor的其他外部方法调用,即ActorTimer和ActorReminder内部就去未执行完毕之前,该Actor其他方法只能等待. ...