今日刷題總結-leetcode48五、母牛繁殖問題、猴子偷桃問題(2020.11.7)

Leetcode485

  題目:

    給定一個二進制數組, 計算其中最大連續1的個數。java

    示例 1:編程

    輸入: [1,1,0,1,1,1]
    輸出: 3
    解釋: 開頭的兩位和最後的三位都是連續1,因此最大連續1的個數是 3.
    注意:數組

    輸入的數組只包含 0 和1。
    輸入數組的長度是正整數,且不超過 10,000。測試

 

  本人思路:

    想利用兩個數組,一個是原題目中的數組,一個是自定義數組count,count數組的做用是用來存儲出現連續1後1的數量,好比 [1,0,1,1,1,0,0,1,1]這個數組,數組中是否每個count索引存儲出現連續1時1的數量,count[0]=1,count[1]=3,count[2]=2。採用for的嵌套循環,外層循環控制新數組的索引,內層循環用來控制原數組對連續1進行計數,每當碰到1就對count對應索引的元素加一,碰到0就退出本層循環,爲了不內層循環從頭開始繼續,須要用外層的變量對內層變量進行初始化。最後對count數組進行遍歷以後提取出最大元素。

 

 

  僞代碼:

    

class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
        int[] count = new int[1000000];
        int max =0;
        for(int j =0;j<count.length;j++)
        {
            for(int i=j;i<nums.length;i++)
            {
                if(nums[i]==1)
                {
                    count[j]++;
                }
                if(nums[i]==0)
                {
                    break;
                }         
            }
        }
        for(int j =0;j<count.length;j++)
        {
            
            if(count[j]>max)
            {
                max = count[j];
            }
        }
        return max;
    }
}

 

藍橋杯(1004)-母牛的故事

  題目:   

    題目描述

      有一頭母牛,它每一年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每一年年初也生一頭小母牛。請編程實如今第n年的時候,共有多少頭母牛?spa

    輸入

      輸入數據由多個測試實例組成,每一個測試實例佔一行,包括一個整數n(0<n<55),n的含義如題目中描述。
      n=0表示輸入數據的結束,不作處理。code

    輸出

      對於每一個測試實例,輸出在第n年的時候母牛的數量。
      每一個輸出佔一行。blog

    樣例輸入
      2
      4
      5
      0
    樣例輸出
      2
      4
      6

 本人思路:
  
    首先觀察題目,不難發現母牛在前三年內的數量都爲1,但在第4年開始,牛的總數等於前一年和前第三年這兩年牛數量的總和,這不由讓我想到了斐波那契數列數列,這個數列從第3項開始,每一項都等於前兩項之和。
    因此咱們只須要定義第一年和第三年牛的總數,就能夠利用循環計算出對應年份的牛的總數。
 

  僞代碼:


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Scanner sc = new Scanner(System.in);
        int[] num = new int[3];
        int i =0;
        //hasNext使得判斷爲true時不斷輸入。
        while(sc.hasNext())
        {
            int n = sc.nextInt();
            if(n==0)
            {
                break;
            }

            num[i] = cownum(n);
            i++;
        }
        for (int j =0;j<num.length;j++)
        {
            System.out.println(num[j]);
        }
    }
    public static int cownum(int x) {
        //定義一個長度爲60的數組
        int[] a = new int[60];
        a[0] = 1;
        a[1] = 2;
        a[2] = 3;
        //類斐波那契數列
        for(int i=3;i<x;i++)
        {
            a[i] = a[i-1]+a[i-3];
        }

        return a[x-1];
    }
}
 
  

藍橋杯(1020)-猴子吃桃

  題目:    
    題目描述:
      猴子吃桃問題。猴子第一天摘下若干個桃子,立即吃了一半,還不過癮,又多吃了一個。 次日早上又將剩下的桃子吃掉一半,又多吃一個。之後天天早上都吃了前一天剩下的一半零一個。 到第N天早上想再吃時,見只剩下一個桃子了。求第一天共摘多少桃子。
    輸入
      N
    輸出
      桃子總數
    樣例輸入
      10
    樣例輸出
      1534

我的思路:
  既然知道最後只剩下了一個桃子,咱們不妨採用逆向推理,從最後剩下的一個桃子上作文章,找出初始桃子總數和下一臺你桃子總數之間的關係爲2n+2,採用遞歸的方法輕鬆解決這道題目,關鍵的遞歸的條件就是咱們知道最後僅僅剩下一個桃子。
 
    

 

   僞代碼題解:  
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int day = sc.nextInt();

        System.out.println(eat(day));
        
    }
    private static int eat(int n){
        if (n==1){
            return 1;
        }
        return(2+2*eat(n-1));
    }
}
相關文章
相關標籤/搜索