zoukankan      html  css  js  c++  java
  • 笔试题&面试题:给定n个数,要求比較次数1.5n同一时候找出最大值和最小值

    写出一个算法,对给定的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.
    ", max);
    	printf("The min number is: %d.
    ", min);
    	printf("Compare number is: %d.
    ", count);
    }
    
    int main()
    {
    	int num[10] = {2, 4, 5, 6, 8, 3, 7, 1, 9, 10};
    	find_max_min(num, 10);
    
    	return 0;
    }
    程序执行结果截图:



  • 相关阅读:
    积分第一中值定理
    History of mathematics(19th century)
    使用多项式解决矩阵问题
    菊与刀
    Mathematics during the Scientific Revolution(18th century)
    摄动
    Cauchy中值定理
    Leetcode3---Longest Substring Without Repeating Characters
    Leetcode2---Add Two Numbers
    矩形覆盖
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7090069.html
Copyright © 2011-2022 走看看