1. 程式人生 > >找出陣列中第二大的值

找出陣列中第二大的值

如何找出陣列中的第二大數

演算法思路:

方法1:

  快速排序後根據陣列下標獲得陣列中第二大的值

方法2:

(1)首先定義一個變數來儲存陣列的最大數,初始值為陣列首元素;另一個變數用來儲存陣列元素的第二大數,初始值為最小負數 -32767,然後遍歷陣列元素。

(2)如果陣列元素的值比最大數變數的值大,則將第二大變數的值更新為最大數變數的值,最大數變數的值更新為該元素的值;如果陣列元素的值比最大數的值小,則判斷該陣列元素的值是否比第二大數的值大,如果大,則更新第二大數的值為該陣列元素的值。

程式碼實現:

package Array;

/**
 * 獲取陣列中第二大的數
 */
public class SecondMax {
    public static int FindSecMax(int data[]){
        int count = data.length;
        int maxnumber = data[0];
        int sec_max = Integer.MIN_VALUE;//最小負整數
        for (int i=1;i<count;i++){//迴圈遍歷一遍
            if (data[i]>maxnumber){//當前陣列元素的值是比最大的數大
                sec_max=maxnumber;//更新第二大的數值為先前的最大值
                maxnumber = data[i];//更新先前的最大值為當前陣列元素的值
            }
            else{
                if (data[i]>sec_max){//當前陣列元素的值是比最大值小則與第二大值比較
                    sec_max = data[i];//如果當前陣列元素的值比第二大值大,則更新第二大值
                }
            }
        }
        return sec_max;
    }
    public static void main(String[] args){
        int[] array = {7,3,19,40,4,7,1};
        System.out.println(FindSecMax(array));
    }
}

相關推薦

(java)leetcode852 山脈陣列的封頂索引(二分查詢法陣列最大的下標)(Peak Index in a Mountain Array)

題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A

用 prompt 輸入字串,建立陣列陣列最大,問題闡述與解決。

用 prompt 輸入字串建立陣列。用三種方法找出陣列中最大值。問題闡述與解決。 實現目標:輸入一組數,並找出這組數中最大的值。 採用的方法: 雙 for迴圈,列出從小到大(從大到小)順序。 單 for 迴圈,一遍迴圈找出最大值。 使用 Math.max。

陣列k大的數(時間複雜度分析、C++程式碼實現). TopK in array. ( leetcode

找出陣列中第k大的數. TopK in array. ( leetcode - 215 ) 最近面試過程中遇到的一個題目,也是大資料時代常見的題目,就來總結一下。 面試題目: 1、10億數中,找出最大的100個數。用你能想到的最優的時間和空間效率。 2

前端演算法題:陣列k大的數字出現多少次

題目:給定一個一維陣列,如[1,2,4,4,3,5],找出陣列中第k大的數字出現多少次。 例如:第2大的數是4,出現2次,最後輸出 4,2 function getNum(arr, k){ // 陣列排序-&gt;從大到小 arr.sort((a, b)=&gt;{

陣列K個最小的數(快速排序)

問題描述:給定一個無序的陣列,從一個數組中找出第K個最小的數,例如,對於給定陣列序列{1,5,2,6,8,0,6},其中第4小的數為5。 演算法思路:採用快速排序,分而治之的思想,根據主元,每次Partiton以主元為軸,比它小的數在左邊,比它大的數在右邊,判

劍指Offer/滴滴2018校招筆試題-陣列K大元素-雙路快排實現

程式設計題例項 滴滴2018校招筆試題程式設計題2: 找出陣列中第K大的元素 輸入 45,66,58,22 2 輸出 45 程式設計原理 這道題與

利用快排思想陣列k大的元素

#include <iostream> #include <vector> using namespace std; //用快排的思想:例如找49個元素裡面第24大的元素,那麼按如下步驟: //1.進行一次快排(將大的元素放在前半段,小的元素放在後

Java面試寶典——求陣列兩兩相加等於指定數的組合種數 + 如何陣列k個最小的數

求陣列中兩兩相加等於指定數的組合種數package demos.array; import java.util.Arrays; /** * @author wyl * @time 2018年7

如何一條sql語句查二大

roman splay 排名 數據庫 依然 sel col eight over 例1: 一個Customer表,一個字段Value,現請問如何查到Value中第二大的值 select max(value) from Customer

Three Sum(陣列,所有三個數字的組合,其和為給定的情況)

import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Three Sum * * Given an array S of n integ

Leetcode421. 陣列兩個元素異或的最大

Leetcode421. Maximum XOR of Two Numbers in an Array 題目 Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai

陣列兩數之和為指定的所有整數對

一,問題描述 給定一個整型陣列(陣列中的元素可重複),以及一個指定的值。打印出陣列中兩數之和為指定值的 所有整數對 思路1:可以用hash表來儲存陣列中的元素,這樣我們取得一個數後,去判斷sum - val 在不在陣列中,如果在陣列中,則找到了一對二元組,它們的和為sum,

陣列第二大的

如何找出陣列中的第二大數 演算法思路: 方法1:   快速排序後根據陣列下標獲得陣列中第二大的值 方法2: (1)首先定義一個變數來儲存陣列的最大數,初始值為陣列首元素;另一個變數用來儲存陣列元素的第二大數,初始值為最小負數 -32767,然後遍歷陣列元素。

陣列的最大方法總結

<!DOCTYPE html> <html> <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><

[c語言]codeday15陣列出現一次的兩個以及喝汽水模擬實現strcpy和

1.一個數組中只有兩個數字是出現一次, 其他所有數字都出現了兩次。 找出這兩個數字,程式設計實現 #include<stdio.h> void find(int arr[],int len,int *m,int *n) { int s = 0;

Problem B: 零起點學演算法81——陣列最大元素的位置(下標值

#include<stdio.h> int main(void) { int n,a[10],i,max; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",

微策略2011校園招聘筆試題(陣列兩個只出現一次的數字)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

劍指offer之陣列出現次數超過一半的數字

找出陣列中出現次數超過一半的數字 歡迎關注作者簡書 csdn傳送門 題目   一個數組中有一個數字的次數超過了陣列的一半,求出這個字元。如:int a[] = {2,3,2,2,2,2,2,5,4,1,2,3},求出超過一半的數字是2 分析 解法一

leetcode 448 陣列所有消失的數字

給定一個範圍在  1 ≤ a[i] ≤ n ( n = 陣列大小 ) 的 整型陣列,陣列中的元素一些出現了兩次,另一些只出現一次。 找到所有在 [1, n] 範圍之間沒有出現在陣列中的數字。 您能在不使用額外空間且時間複雜度為O(n