LeetCode-485-最大連續 1 的個數

雄獅虎豹發表於2022-05-04

最大連續 1 的個數

題目描述:給定一個二進位制陣列, 計算其中最大連續 1 的個數。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:陣列遍歷

首先,考慮特殊情況,如果原陣列為空,不可能有連續的1,直接返回0。

否則,遍歷陣列,並記錄每一波連續出現的1出現的最大長度,最後返回之。

public class LeetCode_485 {
    /**
     * 陣列遍歷
     *
     * @param nums 原陣列
     * @return
     */
    public static int findMaxConsecutiveOnes(int[] nums) {
        // 如果原陣列為空,不可能有連續的1,直接返回0
        if (nums == null || nums.length == 0) {
            return 0;
        }
        // 記錄最長連續1的個數
        int max = 0;
        // 記錄上一個數的值是0還是1;記錄上一個數(如果是1)連續出現的次數
        int curNum = 0, curCount = 0;
        // 遍歷陣列
        for (int i = 0; i < nums.length; i++) {
            if (curNum == 0 && nums[i] == 0) {
                // 如果上一個數是0而且當前索引的數也是0,則跳過
                continue;
            } else if (curNum == 0 && nums[i] == 1) {
                // 如果上一個數是0且當前索引的數是1,則當前數字是新的連續的1的起點,更新curNum和curCount的值
                curNum = 1;
                curCount++;
            } else if (curNum == 1 && nums[i] == 0) {
                // 如果上一個數是1而且當前索引的數是0,則上一個數是上一波連續的1的終點,判斷連續的個數是否比max大,如果是,更新之;並更新curNum和curCount的值
                max = Math.max(max, curCount);
                curNum = 0;
                curCount = 0;
            } else if (curNum == 1 && nums[i] == 1) {
                // 如果上一個數是1而且當前索引的數也是1,則更新curCount的值
                curCount++;
            }
        }
        // 最後,返回max和可能的最後一波連續的1的個數的較大值
        return Math.max(curCount, max);
    }

    public static void main(String[] args) {
        int[] nums = {1, 1, 0, 1, 1, 1};
        // 測試用例,期望輸出: 3
        System.out.println(findMaxConsecutiveOnes(nums));
    }
}
【每日寄語】 失敗對於強者是逗號,對於弱者是句號。

相關文章