剑指offer算法题
数组中只出现一次的数字(一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字):
解法在于位运算中的异或,直接异或可以得到这两个数的异或,按照最后的有效数字位可以分为两个数组,然后分别异或得到各自的值;
void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
if(data.size()==0) return;
*num1=0;
*num2=0;
vector<int> data1,data2;
int res=0,flag=0;
for(auto &i : data)
res^=i;
while(!(res&1)){
res>>=1;
flag++;
}
int num=1<<flag;
for(auto &i : data){
if(i&num) data1.push_back(i);
else data2.push_back(i);
}
for(int &i : data1)
*num1^=i;
for(int &i : data2)
*num2^=i;
return;
}
二进制中1的个数:
int NumberOf1(int n) {
int count=0;
while(n){
count++;
n=n&(n-1); //把最后的1给消除掉,总共消除了几次,就证明有几个1
}
return count;
}
数字在排序数组中出现的次数
class Solution {
public:
int res=0; //全局变量
int GetNumberOfK(vector<int> data ,int k) {
int size=data.size();
if(size<=0) return 0;
getn(data,0,size-1,k);
return res;
}
int getn(vector<int> &data,int start, int end, int k){
if(start>end) return 0; //退出条件
int mid=(start+end)/2; //二分 复杂度logn
if(data[mid]==k){
res++; //更改出现次数
getn(data,start,mid-1,k);
getn(data,mid+1,end,k);
}
else if(data[mid]<k){
getn(data,mid+1,end,k);
}
else getn(data,start,mid-1,k);
return 0;
}
};
//可以改为当找到匹配点,从左右开始找相同的,然后直接退出递归
if(k[mid]==a){
res++;
int i=mid;
while((--i)>=0&&k[i]==a){
res++;
}
while((++mid)<10&&k[mid]==a){
res++;
}
return 0;
}
数据流中的中位数:采用两个堆,O(N)的复杂度
class Solution {
public:
void Insert(int num)
{
++count;
if(count&1){ //如果是奇数个数的元素,则先放入小顶堆,然后把小顶堆中的顶放到大顶堆中
min_heap.push(num);
max_heap.push(min_heap.top());
min_heap.pop();
}
else{
max_heap.push(num);
min_heap.push(max_heap.top());
max_heap.pop();
}
}
double GetMedian()
{
if(count&1) return max_heap.top();
else return (max_heap.top()+min_heap.top())/2.0;
}
private:
int count=0;
priority_queue<int, vector<int>, less<int>> max_heap;
priority_queue<int, vector<int>, greater<int>> min_heap;
};
剑指offer算法题的更多相关文章
- 剑指offer算法总结
剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行 ...
- 剑指Offer——算法复杂度中的O(logN)底数是多少
剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多 ...
- 剑指 offer 第一题: 二维数组中的查找
打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣
- 剑指Offer编程题2——替换空格
剑指Offer编程题2——替换空格 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happ ...
- 剑指Offer编程题1——二维数组中的查找
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
- 剑指offer编程题66道题 36-66
36.两个链表的第一个公共节点 题目描述 输入两个链表,找出它们的第一个公共结点. 1.具有重合节点的两个链表是一个Y字性,用两个堆栈放这两个链表,从尾部开始遍历,直到遍历到最后一个重合节点. 这种算 ...
- 牛客网剑指offer刷题总结
二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...
- LeetCode剑指Offer刷题总结(一)
LeetCode过程中值得反思的细节 以下题号均指LeetCode剑指offer题库中的题号 本文章将每周定期更新,当内容达到10题左右时将会开下一节. 二维数组越界问题04 public stati ...
- 剑指offer编程题Java实现——面试题11数值的整数次方
题目: 实现函数double power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 解题思路:最一般的方法实现数值 ...
随机推荐
- c# 字符串转Byte[],如何将Byte[]插入到Oracle Blob
byte[] xx=Encoding.Default.GetBytes("12121232"); 插入数据库 string sqlStr = "update sys_ta ...
- 【刷题】BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- 【POJ2891】Strange Way to Express Integers(拓展CRT)
[POJ2891]Strange Way to Express Integers(拓展CRT) 题面 Vjudge 板子题. 题解 拓展\(CRT\)模板题. #include<iostream ...
- 【BZOJ1458】【洛谷4311】士兵占领(网络流)
[BZOJ1458][洛谷4311]士兵占领(网络流) 题面 BZOJ权限题,洛谷真好 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最 ...
- C#实现SQL数据库备份与恢复
有两种方法,都是保存为.bak文件.一种是直接用Sql语句执行,另一种是通过引用SQL Server的SQLDMO组件来实现: 1.通过执行Sql语句来实现 注意,用Sql语句实现备份与还原操作时, ...
- 第3章-Vue.js 指令扩展 和 todoList练习
一.学习目标 了解Vue.js指令的实现原理 理解v-model指令的高级用法 能够使用Vue.js 指令完成 todoList 练习(重点+难点) 二.todoList练习效果展示 2.1.效果图展 ...
- 深度学习voc数据集图片resize
本人新写的3个pyhton脚本. (1)单张图片的resize: # coding = utf-8 import Image def convert(width,height): im = Image ...
- cc1: warnings being treated as errors解决办法
安装GDB时出现cc1: warnings being treated as errors Edit the Makefile and delete this line:WERROR_CFLAGS = ...
- [LeetCode] Matrix 值修改系列,例题 Surrounded Regions,Set Matrix Zeroes
引言 Matrix内部的值修改严格来讲放在一个系列里不大合适,因为对于不同的问题,所用的算法和技巧可能完全不同,权且这样归类,以后需要时再拆分吧. 例题 1 Given a 2D board cont ...
- 构造+分块思想 Codeforces Round #319 (Div. 1) C
http://codeforces.com/contest/576/problem/C 题目大意: 给你一个曼哈顿距离的图,然后要求你找到一个链,链穿了所有的点 然后要求这链的长度<=25*10 ...