Java編程----時間效率02__演算法

來源:互聯網
上載者:User

本題主要考察的是數組和排序的結合,下面直入正題:
題目描述:輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

題目要求: 時間限制:1秒   空間限制:32768K

解題思路: 首先,看到題目之後,我們要尋找數組中最小的K個數,就必須將K和數組的長度進行比較,只有數組的長度大於等於K,我們才能返回這K個數。 接著,我們怎樣接受返回的K個數呢。我們就要定義一個數組,這個數組的長度為K。 準備工作就緒之後,我們就要開始思考怎麼找到這最小的K個數。我們一定會不假思索的說排序。對,就是排序,怎麼樣排序才能提高效率。我們不可能把數組全部進行排序,然後取最小的K個數,這樣會大大降低效率,因為我們對後面(array.length-K)個數進行排序是多餘的,所以我們只需將數組進行K次排序擷取最小的K個數就可以。在這裡我用的是選擇排序而沒有用冒泡排序是因為,冒泡排序每次都要進行資料交換,太耗時,而選擇排序只需要定義一個變數指向最小的值,然後再與前面的進行交換即可。

代碼實現:

public class Test03 {      public int[] solution(int [] input, int k) {            //這是檢查k,input.length的關係以及它們的值,若不符合要求則返回null            if(k<1||input.length<1||input.length<k){                return null;            }            //定義一個長度為k的數組,進行資料的儲存            int[] dest = new int[k];            //以下是選擇排序            //只需擷取數組的前k項就可以了,所有我們只迴圈k次            for (int i = 0; i < k; i++) {                //定義一個temp變數,相當於指標                int temp = i;                //每次從第i個開始遍曆,temp指向最小的那個數                for (int j = i+1; j < input.length; j++) {                    if(input[temp]>input[j]){                        temp = j;                    }            }            //將temp指向的值與input[i]進行交換            int s = input[i];            input[i] = input[temp];            input[temp] = s;            //將input[i]的值賦值給dest[i]            dest[i] = input[i];            }            return dest;      }      public static void main(String[] args) {          Test03 test = new Test03();          int[] array = {3,4,2,8,5,6,1,7,9};          int[] dest = test.solution(array, 5);          System.out.print("運行結果:");          for(int i : dest){              System.out.print(i+" ");          }    }}

運行結果:

運行結果:1 2 3 4 5 
總結

這題主要考察的是對數組進行排序的思想,有幾種常見的排序,比如冒泡排序,選擇排序,快速排序,希爾排序等等,這些排序我將會在Java資料結構中進行講解,希望大家關注。另外,演算法的效率決定了程式員的能力,大家切忌只關注運行結果不關注演算法效率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.