(LeetCode 每日一题) 1493. 删掉一个元素以后全为 1 的最长子数组 (双指针)
题目:1493. 删掉一个元素以后全为 1 的最长子数组
思路:双指针,时间复杂度0(n)。
C++版本:
class Solution {
public:int longestSubarray(vector<int>& nums) {int ans=0;int left=0,cnt=0;for(int i=0;i<nums.size();i++){cnt+=1-nums[i];// cnt>1说明不止一个0while(cnt>1){cnt-=1-nums[left];left++;}ans=max(ans,i-left);}return ans;}
};
JAVA版本:
class Solution {public int longestSubarray(int[] nums) {int ans=0;int left=0,cnt=0;for(int i=0;i<nums.length;i++){cnt+=1-nums[i];while(cnt>1){cnt-=1-nums[left];left++;}ans=Math.max(ans,i-left);}return ans;}
}
GO版本:
func longestSubarray(nums []int) int {ans,left,cnt:=0,0,0for i:=0;i<len(nums);i++ {cnt+=1-nums[i]for cnt>1 {cnt-=1-nums[left]left++}ans=max(ans,i-left)}return ans
}