JAVA 算法練習(一)


用java寫了幾道編程題目,分享給大家

語法和C語言幾乎一樣,不懂 java 會 c 也可以看明白的。

最大連續數列和

題目說明

對於一個有正有負的整數數組,請找出總和最大的連續數列。給定一個int數組A和數組大小n,請返回最大的連續數列的和。保證n的大小小於等於3000。

測試樣例:
[1,2,3,-6,1]
返回:6

解析

  題目要求找到總和最大的連續數列。你可以隨意寫幾條包含正負數的數列,來找到方法。這本來是一道貪心問題,但我用暴力也可以在規定時間內得出解。(好吧,我承認我太菜了,只會暴力求解)具體方法大家分析代碼吧,簡單講,就是兩層循環求出所有連續數列的和,每次求得的和與之前求到的最大和比較。

代碼如下:

public class MaxSum {
    public int getMaxSum(int[] A, int n) {
        int sum = -99999,s;
        for (int i = 0; i < n; i++) {
            s = 0;
            for (int j = i; j < n; j++) {
                s += A[j];
                if (s > sum)
                    sum = s;    
            }
        }
        return sum;
    }
}

第K個數

題目說明

  
  有一些數的素因子只有3、5、7,請設計一個算法,找出其中的第k個數。給定一個數int k,請返回第k個數。保證k小於等於100。
  
測試樣例:
3
返回:7

解析

  這道題目要求求得第k個因子只有3、5、7的數,我們可以從3開始,不斷累加,並測試它是否滿足條件,直到求得第k個數。

代碼如下:

public class KthNumber {
    public int findKth(int k) {
        int n;
        int m = 3;
        while (k != 0) {
            n = m;
            while(n%3 == 0) 
                n /= 3;
            while(n%5 == 0)
                n /= 5;
            while(n%7 == 0)
                n /= 7;
            if (n == 1)
                k--;
            m = m + 2; // 只可能為奇數,累加2可以提高效率
        }
        return m - 2;
    }
}

附:

我也不知道該附什么了。。。好久沒看文學的東西了。。。
附句話吧:

我要把這個世界敲得明明白白。 0/1

以上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM