写出一个算法,对给定的n个数的序列,返回序列中的最大和最小的数.

设计出一个算法,仅仅须要运行1.5n次比較就能找到序列中最大和最小的数吗?是否能再少?

分析:要求比較次数为1.5n,使用一般的逐个遍历每一个元素然后推断其是否为最大最小值是须要2n次的比較的,所以这个方案是行不通的。

如今考虑採用,每次从数组中取出两个元素。推断其大小。然后再分别推断其是否是最大或最小值,这样一次处理两个元素。每一次比較3次,终于的比較次数就是n/2*3=1.5n。

C语言代码例如以下:

#include <stdio.h>

#define	MIN	-1
#define MAX 65535 void find_max_min(int num[], int len)
{
int i, j;
int max = MIN;
int min = MAX;
int tmax, tmin;
int count = 0; /*用来统计比較次数*/ i = 0;
j = len - 1;
while(i <= j)
{
if(num[i] < num[j])
{
tmax = num[j];
tmin = num[i];
count ++;
}
else
{
tmax = num[i];
tmin = num[j];
count ++;
} if(min > tmin)
min = tmin;
if(max < tmax)
max = tmax;
count += 2; /*上面的两次比較*/
i ++;
j --;
}
printf("The max number is: %d.\n", max);
printf("The min number is: %d.\n", min);
printf("Compare number is: %d.\n", count);
} int main()
{
int num[10] = {2, 4, 5, 6, 8, 3, 7, 1, 9, 10};
find_max_min(num, 10); return 0;
}

程序执行结果截图:

笔试题&amp;面试题:给定n个数,要求比較次数1.5n同一时候找出最大值和最小值的更多相关文章

  1. [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。

    [Date]2013-09-19 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Content]: 1.面试题 输入一个整型 ...

  2. 长度为n的数组,有一个数重复出现了n/2+1次,找出(三种方法)

    问题: 长度为n的数组,有一个数重复出现了n/2+1次,找出这个数:   解决: 比较直接的思路是遍历每个元素,让其与剩下其他元素比较,相等一次计数器sum++,直到sum=n/2+1为止: #inc ...

  3. 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...

  4. 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数

    给定一个整数数组,除了某个元素外其余元素均出现两次.请找出这个只出现一次的元素.备注:你的算法应该是一个线性时间复杂度. 你可以不用额外空间来实现它吗? 详见:https://leetcode.com ...

  5. LeetCode 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数

    Given an array of integers, every element appears twice except for one. Find that single one. class ...

  6. 找出一堆数中最小的前K个数

    描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然 ...

  7. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

  8. 【面试题030】最小的k个数

    [面试题030]最小的k个数 题目:     输入n个整数,找出其中最小的k个数.     例如输入4.5.1.6.2.7.3.8这8个字,则其中最小的4个数字是1.2.3.4.     思路一:   ...

  9. 【剑指offer】面试题 15. 二进制中 1 的个数

    面试题 15. 二进制中 1 的个数 题目描述 题目:输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. Java 实现 方法一 public class Solution { // y ...

随机推荐

  1. Linux下开启vim高亮

    默认是不高亮的. [root@local ~]# vi ~/.vimrc 没有则新建这个文件. 或者修改 [root@local vim74]# vi /etc/vimrc 添加一行. syntax ...

  2. 字符流、字节流、二进制及其在HTTP协议传输

    一.二进制.字节.字符流概念 字(Byte)节是长度单位.位(bit)也是长度单位.计算机通信和存储的时候都是以010101这样的二进制数据为基础的二进制数有两个特点:它由两个基本字符0,1组成,二进 ...

  3. Java:笔记-1

    ylbtech-Java:笔记-1 1.返回顶部 1. /** * 简介请求 * @return */ @RequestMapping("/JJ") public String j ...

  4. 转载【梦想天空(山边小溪)】Web 开发人员和设计师必读文章推荐【系列二十九】

    博客地址:http://www.cnblogs.com/lhb25/p/must-read-links-for-web-designers-and-developers-volume-29.html

  5. SSRS 报表 如何加参数

    SSRS 报表 如何加参数 连接上以后出现一个问题 就是给报表加上参数以后报表不断刷新,跟上次那个报表刷新是同样的问题.那么下面我们来解决一下. 1. 这是给报表添加默认参数进入页面后就不断的刷新刷新 ...

  6. mysql5.7 设置密码

    5.7版本的MYSQL的用户表的密码字段与以往版本有所区别, 不再是password字段 而是authentication_string字段. 请注意修改密码: vim  /opt/mysql_d/m ...

  7. 备忘录模式(Memento)C++实现

    备忘录模式 意图: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将改对象恢复到原先保存的状态. 适用性: 1.必须保存一个对象在某一个时刻的部分状态,这样以 ...

  8. deepin下jdk和tomcat的安装教程

    在deepin上安装java是真的心累啊,照着网上的教程弄,结果一团糟.好不容易折腾成功了,记录下来. 1.下载jdk 首先我们要知道,用sudo 类似命令下载的jdk,是open的jdk,是开源的, ...

  9. 前端-Angular思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  10. django 安装运行

    pip install django pip list 查看版本 python -m django --version 新建django django-admin startproject mysit ...