1. 程式人生 > >陣列中最大最小值的蠻力法和二分法求解

陣列中最大最小值的蠻力法和二分法求解

方法一:蠻力法

/**用最少的比較次數找出一袋金塊中最重的和最輕的**/
/**蠻力法,相當於一次排序*/
#include<iostream>
using namespace std;
int main(){
    int a[5];//為了輸入的時候省事才弄這麼小的
    for(int i=0;i<5;i++){
        cin>>a[i];
    }
    int max1=a[0],min1=a[0];
    for(int j=0;j<5;j++){
        if(a[j]>max1){
            max1=a[j];
        }else if(a[j]<min1){
            min1=a[j];
        }
    }
    cout<<"max="<<max1<<"min="<<min1<<endl;
}

方法二:二分法
/**二分法*/
int a[9]={1,9,5,8,6,3,2,4,7};
int maxmin(int i,int j,float &fmax,float &fmin){
    float lmin,lmax,rmin,rmax,mid;
    if(i==j){
        fmax=a[i];
        fmin=a[i];
    }
    else if(j-i==1){
        fmax=(a[i]>a[j])?a[i]:a[j];
        fmin=(a[i]<a[j])?a[i]:a[j];
    }
    else {
        mid=(i+j)/2;
        maxmin(i,mid,lmax,lmin);
        maxmin(mid,j,rmax,rmin);
        fmax=(lmax>rmax)?lmax:rmax;
        fmin=(lmin<rmin)?lmin:rmin;
    }
}
int main(){
    float _max,_min;
    maxmin(0,8,_max,_min);
    cout<<_max<<" "<<_min;
}
解釋:把資料分成兩組,可能是一組比另一組多一個數,沒關係,就比較出組內最大值和組內最小值就好,然後再將其分成兩組,找最大最小值,直到只剩下一個數或者兩個數,只剩一個就說明他自己就是最大或者最小,剩兩個下來就比較大小,大的就是最大的小的就是最小的,然後回溯,子陣列中大的給fmax,就是最終的最大值,子陣列中的最小的給fmin,最終的最小值

相關推薦

陣列二分求解

方法一:蠻力法 /**用最少的比較次數找出一袋金塊中最重的和最輕的**/ /**蠻力法,相當於一次排序*/ #include<iostream> using namespace std;

模擬退火演算法求函式——python實現

模擬退火演算法(Simulate Anneal,SA)是一種通用概率演演算法,用來在一個大的搜尋空間內找尋命題的最優解。模擬退火是由S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所發明的。V.Černý在1985年也獨

#定義泛型類#分別求IntegerDouble型陣列元素的,平均值

public class NumFunc<T extends Number> { T[]a; public NumFunc(T[]a){ super(); this.a=a; } private void so

[JS] 查詢物件陣列某屬性的

查詢物件陣列中某屬性的最大最小值的快捷方法 例如要查詢array陣列中物件的value屬性的最大值 var array=[ { "index_id": 119, "area_id": "18335623",

C#練習(輸入10個數存入陣列,求和平均值.)

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:

【Web前端】從陣列/

前言 因為Math.max() 以及 Math.min() 方法中傳入的應該是一組數,陣列是接收不了的,所以對從陣列中找最大值的方法做一些總結。 方法一 Math.max.apply(null, arr); Math.min.apply(null, ar

陣列

package org.westos_01_一位陣列的應用; /*  * 2)陣列的最值問題:  * 需求:求陣列中的最大和最小值  * 分析:求最大值  * 1)定義一個數組,靜態初始化  * 2)選定一個參照物,一般以陣列中的第一個元素:arr[0]:int max =

均值濾波,濾波,濾波

fin proc repeat 效果 mod ava rom static 包含 http://blog.csdn.net/fastbox/article/details/7984721 討論如何使用卷積作為數學工具來處理圖像,實現圖像的濾波,其方法包含以下幾種,均值 濾波

js二叉樹,前序/序/後序(,排序)

data nod can ole right unshift func pro node function Node(data,left,right) { this.left=left this.right=right

JS基礎:求一組數,以及所在位置

們的 con style 兩個 元素 nbsp 位置 最小值 font 1 var arr = [0, 5, -3, 6, 2, -6, 10]; 2 //定義一個最大值和一個最小值,把他們的索引值賦值給固定的兩個變量 3

Java 數組 定義一個數組,獲取數組,奇數個數偶數個數

++ java 偶數 system += 最小值 dem [] style /** * 定義一個數組,獲取數組中的最大值和最小值 奇數個數和偶數個數 * */ package com.xuyigang1234.chp01; public class Demo8 {

劍指offer——輸出陣列k個(快速,冒泡,選擇,插入)

找k個最小值,基本思路是對陣列排序,輸出前k個或者後k個,我們回顧一下之前的學習過的集中排序方法: 快速排序 class Solution(): def GetLeastNumbers_Solution(self, tinput,k): def quick_sor

es6 陣列去重及獲取

1.陣列去重 解決方案:使用了ES6新增的set資料解構的去重特性,然後在將生成的set物件轉換成陣列。 <script type="text/javascript"> var arr = [1, 2, 3, 5, 1, 5, 7, 3];var newArray = A

C語言的庫函式

  最近在倒騰演算法,遇到了求三個數中最小的那個運算,自己寫了一個,發現還是大學水平,在網上發現了一個比較好的例子,這就記錄下了。 #include <stdio.h> int min_fun(int a, int b, int c) { int min;

java整形陣列

int[] arr int[] arr = new int[]{56,33,51,49,102,23};                 //對元素位置進行改變  &nb

C++min_element()與max_element()(取容器

min_element 和 max_element 標頭檔案:#include<algorithm> 作用:返回容器中最小值和最大值的指標。max_element(first,end,cmp);其中cmp為可選擇引數! 例1 #include<ios

HNUM1370: 巍巍嶽麓解題報告---(所有生成樹情況邊權

題目描述 嶽麓山風景區位於湖南省長沙市嶽麓區,佔地面積 35.20 平方公里,是南嶽衡山 72 峰的最後一峰,位於 橘子洲旅遊景區內,為城市山嶽型風景名勝區,是中國四大賞楓勝地之一。 嶽麓山位於首

程式設計師面試題目總結--陣列(三)【旋轉陣列數字、旋轉陣列查詢指定數、兩個排序陣列所有元素中間陣列重複次數多的數、陣列出現次數超過一半的數】

11、求旋轉陣列的最小數字 題目:輸入一個排好序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 分析:陣列的旋轉:把一個數組最開始的若干個元素搬到陣列的末尾。例如陣列{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個旋轉,該陣列的最小值為1。這道題最直觀的解

Leetcode 421.陣列兩數的異或

陣列中兩數的最大異或值 給定一個非空陣列,陣列中元素為 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的異或 (XOR) 運算結果,其中0 ≤ i,j < n。 你能在O(n)的時間解決這個問題嗎? 示例:

javascript實現二叉樹排序,前後序遍歷,特定查詢以及刪除節點

 函式執行時,會產生一個棧用來存放資料,當遍歷到目的節點時,操作結束以後,就會自動執行出棧操作,所以每次執行完畢指標都會自動跳回根節點。可以在開發者模式裡打斷點看到全過程。 <!DOCTYPE html> <html> <head> <me