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 的方法却有好几种不同的花样,并 ...
随机推荐
- pthon之函数式编程
函数式编程是一种抽象计算的编程范式. 不同语言的抽象层次不同:计算机硬件->汇编语言->C语言->Python语言 指令 -> ->函数 ...
- oracle DML-(insert、select、update、delete)
一.插入记录INSERT INTO table_name (column1,column2,...) values ( value1,value2, ...); 示例:insert into emp ...
- 托盘在XP下不能显示tooltip,在Vista和Windows7下正常
转自:http://blog.csdn.net/debehe/article/details/4294053 奇怪的问题,想了很多可能的理由,最终的答案竟然是一开始就被我否认了的一种可能!! 问题现象 ...
- strrpos()和strripos()函数【PHP】
strripos() 函数 定义和用法 strripos() 函数查找字符串在另一个字符串中最后一次出现的位置. 如果成功,则返回位置,否则返回 false. 语法 strrpos(string,fi ...
- OpenGL编程
一.简介 OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序.OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦 ...
- js定时任务
<input type="button" id="btn" value="保存图片" onclick="settime(th ...
- SDUT 3374 数据结构实验之查找二:平衡二叉树
数据结构实验之查找二:平衡二叉树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定的输 ...
- 关于IE6下绝对定位元素莫名消失的问题
一般来说,让绝对定位的元素不挨着浮动元素就OK了: 1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致: 2.当绝对定位层的邻近浮动层的宽度不等于父层宽 ...
- 跑实验配环境(tensorflow)
最近在学习用CNN(卷积神经网络)做图像质量评价,选择的论文是CVPR2014-Convolutional neural networks for no-reference image quality ...
- [译]Javascript中的Ternary operator
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...