LeetCode——485。連続する1の最大数[連続する最大数] [単純]-分析とコード[Java]
1.トピック
バイナリ配列が与えられた場合、連続する1の最大数を計算します。
例1:
输入: [1,1,0,1,1,1]
输出: 3
解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.
注意:
- 入力配列には0と1のみが含まれます。
- 入力配列の長さは正の整数であり、10,000を超えません。
出典:LeetCode
リンク:https://leetcode-cn.com/problems/max-consecutive-ones
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2、分析とコード
1.直接走査
(1)考える
1の連続数を記録する整数を設計します。現在の数が1の場合、長さは+1であり、回答を更新するかどうかを判断します。更新しない場合は、0にリセットします。
(2)コード
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int len = 0, ans = 0;
for (int num : nums) {
if (num == 1) {
len++;
ans = Math.max(len, ans);
} else
len = 0;
}
return ans;
}
}
(3)結果
実行時間:3ミリ秒、
すべてのJava送信でユーザーの27.86%を上回っています。メモリ消費量:40.3 MB、すべてのJava送信でユーザーの14.15%を上回っています。
2.ダブルポインタ
(1)考える
現在の数が1の場合、2番目のポインターを設計して、連続して1である間隔の右側の境界を探し、間隔の長さに応じて回答を更新する必要があるかどうかを判断します。
(2)コード
class Solution {
public int findMaxConsecutiveOnes(int[] nums) {
int n = nums.length, ans = 0;
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
int j = i + 1;
while (j < n && nums[j] == 1)
j++;
ans = Math.max(ans, j - i);
i = j - 1;
}
}
return ans;
}
}
(3)結果
実行時間:1ミリ秒、
すべてのJava送信でユーザーの100.00%を上回っています。メモリ消費量:40.2 MB、すべてのJava送信でユーザーの18.93%を上回っています。
3、その他
何もありません。