LeetCode#525-連續陣列-字首和
阿新 • • 發佈:2020-07-20
package shuzu; import org.omg.CORBA.MARSHAL; import java.util.HashMap; import java.util.Map; /* 525. 連續陣列 給定一個二進位制陣列, 找到含有相同數量的 0 和 1 的最長連續子陣列(的長度)。 示例 1: 輸入: [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量0和1的最長連續子陣列。 示例 2: 輸入: [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是具有相同數量0和1的最長連續子陣列。 注意: 給定的二進位制陣列的長度不會超過50000。 解題思路: //假設[i,j]滿足要求,則1的個數為j-i/2 //所以我們可以等效轉化為字首和來解決 字首和 遇見1count++ 遇見0count-- */ public class p525 { public static int findMaxLength(int[] nums) { int ans=0; HashMap<Integer,Integer> map=new HashMap();//鍵為count,值為下標 int sum_i=0; map.put(0,-1); for(int i=0;i<nums.length;i++){ nums[i]=nums[i]==1?1:-1; sum_i+=nums[i]; if(map.containsKey(sum_i)){ ans= Math.max(ans,i-map.get(sum_i)); } else { map.put(sum_i,i); } } return ans; } public static void main(String[] args) { int nums[]={0,0,1,0,0,0,1,1}; System.out.println(findMaxLength(nums)); } }
執行結果: