最大連續 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));
}
}
【每日寄語】 失敗對於強者是逗號,對於弱者是句號。