Longest One
题目:
给一个stream,都是0或者1,求全为1的subsequence的最长长度。
解题思路:
这道题就是用start和end两个指针。
代码:
Follow up:
如果可以flip一个0,这样的最长连续1的长度是多少。
给一个stream,都是0或者1,求全为1的subsequence的最长长度。
解题思路:
这道题就是用start和end两个指针。
代码:
public int findLongestOne(int[] nums){ int start = 0; int end = 0; int rst = 0; int len = nums.length; for(int i = 0; i <= len - 1; i++){ if(nums[i] == 1 && (i == 0 || (nums[i - 1] == 0))){ start = i; } if(nums[i] == 1 && (i == len - 1 || nums[i + 1] == 0)){ end = i; } if(end >= start){ rst = Math.max(end - start + 1, rst); } } return rst; } public static void main(String[] args){ LongestOne longestOne = new LongestOne(); int[] nums = {1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}; int rst = longestOne.findLongestOne(nums); System.out.println(rst); }
Follow up:
如果可以flip一个0,这样的最长连续1的长度是多少。
public int merge(int[] nums){ int start = 0; int end = 0; int rst = 0; int len = nums.length; List<Interval> list = new ArrayList<>(); for(int i = 0; i <= len - 1; i++){ if(nums[i] == 1 && (i == 0 || (nums[i - 1] == 0))){ start = i; } if(nums[i] == 1 && (i == len - 1 || nums[i + 1] == 0)){ end = i; Interval interval = new Interval(start, end); list.add(interval); } } for(int i = 1; i <= list.size() - 1; i++){ Interval i1 = list.get(i - 1); Interval i2 = list.get(i); if(i1.end + 2 == i2.start){ int len1 = i1.end - i1.start + 1; int len2 = i2.end - i2.start + 1; rst = Math.max(rst, len1 + len2 + 1); } } return rst; }

Comments
Post a Comment