剑指Offer:找出数组中出现次数超过一半的元素
题目:找出数组中出现次数超过一半的元素
解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半
#include <stdio.h> int half_number(int a[], int n)
{
if( a == NULL || n <= )
return -; int i, candidate;
int times = ;
for( i=; i<n; i++ )
{
if( times == )
{
candidate = a[i];
times = ;
}
else if( a[i] == candidate )
++times;
else
--times;
}
return candidate;
} int main(void)
{
int a[] = {,,,,,,,,}; int result = half_number(a, );
if( result != - )
printf("%d\n", result);
else
printf("Error.\n"); return ;
}
该题的扩展:数组中有3个元素出现的次数都超过数组元素总数N的1/4, 找出这三个元素
解法:同上,但是每次删除4个互不相同的元素,处理上比上面的稍微麻烦
#include <stdio.h> void find(int a[], int n)
{
if( a==NULL || n<= )
{
printf("Error.\n");
return ;
} int i,j;
int times[] = {,,}; // 3个candidate的计数
int candidate[] = {-,-,-}; // 假设元素不可能是-1 for( i=; i<n; i++ )
{
if( times[] == && a[i] != candidate[] && a[i] != candidate[] ) // 第1个candidate目前空缺, 且当前元素a[i]不等于其他两个candidate时, 将该元素作为新的candidate
{
candidate[] = a[i];
times[] = ;
}
if( times[] == && a[i] != candidate[] && a[i] != candidate[] )
{
candidate[] = a[i];
times[] = ;
}
if( times[] == && a[i] != candidate[] && a[i] != candidate[] )
{
candidate[] = a[i];
times[] = ;
}
else if( a[i] == candidate[] )
{
++times[];
}
else if( a[i] == candidate[] )
{
++times[];
}
else if( a[i] == candidate[] )
{
++times[];
}
else // 删除4个各不相同的数组元素, 删除后
{
--times[];
--times[];
--times[];
}
}
printf("%d %d %d\n",candidate[],candidate[],candidate[]);
} int main(void)
{
int a[] = {,,,,,,,,,,,,,,,,,,,,,,};
find(a, );
return ;
}
剑指Offer:找出数组中出现次数超过一半的元素的更多相关文章
- 剑指offer.找出数组中重复的数字
题目: 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数 ...
- 【剑指offer】73.数组中出现次数超过一半的数字
73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...
- 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...
- 剑指Offer 找出字符串中第一个只出现一次的字符
题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...
- 剑指offer系列54---数组中出现次数超过一半的数
[题目]数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. * 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}. * 由于数字2在数组中出现了5次,超过数组长度的一半,因 ...
- Java实现找出数组中重复次数最多的元素以及个数
/**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[ ...
- 剑指 Offer 56 - II. 数组中数字出现的次数 II + 位运算
剑指 Offer 56 - II. 数组中数字出现的次数 II Offer_56_2 题目详情 解题思路 java代码 package com.walegarrett.offer; /** * @Au ...
- 《剑指offer》旋转数组中的最小数字
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...
- 【剑指Offer】旋转数组中的最小数字 解题报告(Python)
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
随机推荐
- Linux进程间通信IPC学习笔记之消息队列(Posix)
基础知识: 消息队列可认为是一个消息链表,有足够写权限的线程可往队列中放置消息,有足够读权限的线程可以从队列中取走消息.在某个进程往一人队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达. ...
- The content of element type "sqlMapConfig" is incomplete,
The content of element type "sqlMapConfig" is incomplete, it must match "(properties? ...
- The method of type must override a superclass method
导入android项目时,报The method of type must override asuperclass method 一堆错误, 解决方法: 将编译的jdk与使用的jdk版本一致即可.
- dive into python 读笔(1)
chapter2 and 3: 使用Python IDE来交互式地测试表达式 编写Python程序并且从IDE运行,或者从命令行运行 导入模块及调用它们的函数 声明函数以及doc string.局部变 ...
- 【BZOJ 1084】[SCOI2005]最大子矩阵
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- Xcode和github入门详细教程
Xcode和github详细教程! 主要是参考了现在网上的一些资料给没整过的人一个详细的指南. (1)先在github上注册账号,自行解决! (2)在导航栏右上角new一个repository(仓库) ...
- Elasticsearch从0.90(0.90.x)到1.2(1.x)API的变化-二
本文为官方文档的译文加个人理解.作者翻译时,elasticsearch(下面简称es)的版本为1.2.2. 请支持原创:http://www.cnblogs.com/donlianli/p/38367 ...
- centos apache 隐藏和伪装 版本信息
1.隐藏Apache版本信息 测试默认 apache 的状态信息[root@1314it conf]# curl -Is localhostHTTP/1.1 200 OKDate: Tue, 16 N ...
- Nagios : Verifying Your Configuration
Every time you modify your configuration files, you should run a sanity check on them. It is importa ...
- IText PdfPTable表格 单元的居中显示
昨晚寻找了网上很多关于IText表格居中问题,他们其中的有些代码我即使复制上去生成的doc表格的文字都是不居中的,后来我自己找出了一种居中方式: 为PdfPCell对象添加paragraph对象,并将 ...