一般认为,对于给定的n个数,只要独立地找出最小值和最大值,各用n-1次比较,最多2(n-1)次就可以找出最大值和最小值。 实际上,至多3(n/2)次比较就足以同时找到最大值和最小值,具体做法是:成对的处理元素,先将一对元素互相比较,然后将最小者与当前最小值比较,将较大者与当前最大值比较,因此每两个元素需要3次比较。这里要注意n的奇偶,当n是奇数,就将最小值和最大值都设置为第一个元素
int array[] = {1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 101};
int length = sizeof(array) / sizeof(array[0]);
int max = array[0], min = array[0];
for(int i = 0; i &l...
一个数对 (a,b) 的 数对和 等于 a + b 。
最大数
对和 是一个数对数组中最大的 数对和 。
比方说,如果我们有数对 (1,5) ,(2,3) 和 (4,4),
最大数
对和 为 max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8 。
给你一个长度为 偶数 n 的数组 nums ,请你将 nums 中的元素分成 n / 2 个数对,使得:
nums 中每个元素 恰好 在 一个 数对中,且
最大数
对和 的值 最小 。
请你在最优数对划分的方案下,返回最小的
最大数
对和 。
一直对
时间复杂度
这个概念很模糊,今天在简书上看到了一篇有关
时间复杂度
的介绍,觉得不错(数据结构)十分钟搞定
时间复杂度
(
算法
的
时间复杂度
),因此作一下记录做个分享。
1、
时间复杂度
的概念
通常是指
算法
的
时间复杂度
,即用来度量
算法
的运行时间,记作T(n) =O( f(n) ),表示随着输入大小n的增加,
算法
执行需要的时间的增长速度可以用f(n){即执行次数}来表示。举个例子(如下):
此时的...
啥?你以为排序
算法
的
时间复杂度
最快也只能O(N*log(N))了?
O(N)
时间复杂度
的排序
算法
听说过没有?计数排序!!它是世界上最快最简单的
算法
!!!
计数排序
算法
操作起来只有三步,看完秒懂!
根据待排序集合中最大元素和最小元素的差值范围确定申请的桶个数;
遍历待排序集合,将每一个元素统计到对应的桶中;(此步完成后每个桶里面的数字代表了此桶对应元素出现的次数。)
从小到大遍历一遍所有桶,如果桶...
/*查找数组
最大值
最小值
:
时间复杂度
最多为:o(3n/2)*/
/*基本思想:
当n=2k+1,将让max和min都等于第一个元素,让后将剩余的元素两两
比较
,将大值再与max
比较
,如果
最大值
大于max,则让max等与该
最大值
,
将两个数中的小值再与min
比较
,若小于min,则让min等于该小值。
假定n=2k,设置
最大值
和
最小值
为第一、二个元素,即Max=A[0],Min=A=[1];将n个数据按2个一组进行分组,n/2组数各自进行比
可以使用循环遍历数组,依次
比较
每个元素与当前
最大值
和
最小值
的大小关系,更新
最大值
和
最小值
即可。具体实现如下:
1. 定义一个长度为10的整型数组arr,并读入10个整数存入数组中。
2. 定义两个变量max和min,分别初始化为数组的第一个元素。
3. 使用for循环遍历数组,依次
比较
每个元素与当前
最大值
和
最小值
的大小关系,更新
最大值
和
最小值
。
4. 最后输出
最大值
和
最小值
即可。
代码如下:
int arr[10];
int max = arr[], min = arr[];
for(int i=1; i<10; i++){
cin >> arr[i];
if(arr[i] > max){
max = arr[i];
if(arr[i] < min){
min = arr[i];
cout << "
最大值
为:" << max << endl;
cout << "
最小值
为:" << min << endl;
工业控制信息安全资源汇总
king config:
工业控制信息安全资源汇总
king config: