C++求解数组中出现超1/4的三个数字。
#include <iostream>
using namespace std;
//求x!中k因数的个数。
int Grial(int x,int k)
{
int Ret = 0;
while (x)
{
Ret += x / k;
x /= k;
}
return Ret;
}
int main()
{
cout << Grial(10, 2) << endl;
return 0;
}
//假设要求一个n!中k的因子个数,那么必然满足例如以下的规则。
//即x=n/k+n/k^2+n/k^3...(直到n/k^x小于0);
#include <iostream>
using namespace std;
int Grial(int x, int k)
{
int count = 0;
int n = x;
while (n)
{
n &= (n - 1);
count++;
}
return x - count;
}
int main()
{
cout << Grial(3, 2) << endl;
return 0;
}
//找出数组中出现次数超过数组一半的数字。
#include <iostream>
using namespace std;
int Grial(int a[], int n)
{
int count=0;
int key;
for (int i = 0; i < n; i++)
{
if (count == 0)
{
key = a[i];
count = 1;
}
else
{
if (key == a[i])
{
count++;
}
else
{
count--;
}
}
}
return key;
}
int main()
{
int a[] = {1,2,3,4,5,6,3,3,3,3,3};
cout<<Grial(a, sizeof(a) / sizeof(int))<<endl;
return 0;
}
#include <iostream>
//上一题的扩展,有3个数字出现次数超过1/4。
using namespace std;
void Grial(int a[], int n)
{
if (n <= 3)return;
int count1=0, key1=0;
int count2=0, key2=0;
int count3=0, key3=0;
for (int i = 0; i < n; i++)
{
if (!count1 && key2 != a[i] && key3 != a[i])
{
count1++;
key1 = a[i];
}
else if (key1 == a[i])
{
count1++;
}
else if (key2!=a[i] && key3!=a[i])
{
count1--;
}
if (!count2 &&key3 != a[i] && key1!=a[i])
{
count2++;
key2 = a[i];
}
else if (key2 == a[i])
{
count2++;
}
else if (key1!=a[i] && key3!=a[i])
{
count2--;
}
if (!count3 && key1!=a[i] && key2!=a[i])
{
count3++;
key3 = a[i];
}
else if (key3 == a[i])
{
count3++;
}
else if (key1!=a[i] && key2!=a[i])
{
count3--;
}
}
cout << key1 << endl;
cout << key2 << endl;
cout << key3 << endl;
}
int main()
{
int a[] = {1,5,5,5,5,2,3,1,2,2,1,1,1,2};
Grial(a, sizeof(a) / sizeof(int));
return 0;
}
C++求解数组中出现超1/4的三个数字。的更多相关文章
- 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...
- 《剑指offer》第五十六题(数组中只出现一次的两个数字)
// 面试题56(一):数组中只出现一次的两个数字 // 题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序 // 找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度 ...
- 获取数组中多个相加等于0的一组数字 javascript
//获取数组中两个相加等于0的一对数字,比如[ [ -10, 10 ], [ -5, 5 ] ] var arr=[-5,10,1,-10,3,4,5,9] //对数组进行排序 arr.sort(fu ...
- 【Java】 剑指offer(56-1) 数组中只出现一次的两个数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程 ...
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- 34.数组中2个只出现一次的数字[Find two numbers which appear once]
[题目] 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). [分析] 这是一道很新颖的关于位运算的面试题. ...
- 【Offer】[56-1] 【数组中只出现一次的两个数字】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 一个整型数组里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是0(1). ...
- [LeetCode] 421. Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231. Find the maximum re ...
- JS判断一个数组中是否有重复值的三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
随机推荐
- CAD参数绘制图案填充(网页版)
绘制工程图,常常需要将某种图案填充到某一区域,例如剖面线的绘制.MxCAD提供了丰富的填充图案,可以利用这些图案进行快速填充. js中实现代码说明: function DrawPathToHatch2 ...
- WebDAV协议
WebDAV是一项基于 Http1.1 协议的通信协议.它扩展了HTTP 1.1,在Get.Post.Put.Delete 等HTTP标准方法外添加了新方法,使应用程序可对Web Server直接读写 ...
- Vue打包之后部署到 express 服务器上
Part.1 安装 express npm install express body-parer --save Part.2 在项目根目录下创建 app.js 文件作为启动 express 服务器代码 ...
- pycharm激活2018
因为我的是Windows,所以这篇文章只针对Windows系统. 1.将“0.0.0.0 account.jetbrains.com”中的内容添加到hosts文件中,hosts路径为:C:\Windo ...
- vue -vantUI tab切换时 list组件不触发load事件解决办法
最近由于公司项目需要,用vue写了几个简单的页面.用到了vantUI List 列表 瀑布流滚动加载,用于控制长列表的展示 当列表即将滚动到底部时,会触发事件并加载更多列表项. (页面加载完成后默认会 ...
- iPhoneX 适配H5页面的解决方案
由于在iPhonex在状态栏增加了24px的高度,对于通栏banner规范的内容区域会有遮挡情况. 解决方案:在页面通栏banner顶部增加一层高度44px的黑色适配层,整个页面往下挪44px,这种做 ...
- C++中的初始化列表
C++11扩大了列表初始化的适用范围,使其可以用于所有内置类型和用户定义的类型(即类对象). 1.当列表初始化用于内置类型的变量时,这种初始化形式有一个重要的特点:如果我们使用列表初始化且初始化值存在 ...
- centos7安装kvm虚拟机
一 centos7安装kvm虚拟机 1.验证CPU是否支持KVM 结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的. [root@centos ~]# egrep '(vmx| ...
- Python之粘包
Python之粘包 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.deco ...
- leetcode-88合并两个有序数组
合并两个有序数组 思路:利用索引合并两个列表,排序.注意不需要返回值,只修改nums1 class Solution: def merge(self, nums1: List[int], m: int ...