Leetcode刷題java之659. 分割數組爲連續子序列(一天一道編程題之五十三天)

執行結果:

通過

顯示詳情

執行用時 :36 ms, 在所有 Java 提交中擊敗了58.08% 的用戶

內存消耗 :41.8 MB, 在所有 Java 提交中擊敗了50.00%

題目:

輸入一個按升序排序的整數數組(可能包含重複數字),你需要將它們分割成幾個子序列,其中每個子序列至少包含三個連續整數。返回你是否能做出這樣的分割?

 

示例 1:

輸入: [1,2,3,3,4,5]
輸出: True
解釋:
你可以分割出這樣兩個連續子序列 : 
1, 2, 3
3, 4, 5


 

示例 2:

輸入: [1,2,3,3,4,4,5,5]
輸出: True
解釋:
你可以分割出這樣兩個連續子序列 : 
1, 2, 3, 4, 5
3, 4, 5


 

示例 3:

輸入: [1,2,3,4,4,5]
輸出: False


 

提示:


    輸入的數組長度範圍爲 [1, 10000]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

思路:

採用貪心算法,優先和前面的組隊,因爲和後面的組隊會出現單獨的一個或者兩個

另外代碼中get方法改成getOrdefault方法,因爲直接用get可能會空指針

代碼:

class Solution {
    public boolean isPossible(int[] nums) {
        //用來記錄每個數字出現的次數
        HashMap<Integer,Integer> numCount=new HashMap<>();
        //用來計算以這個數結尾的連續的次數
        HashMap<Integer,Integer> count=new HashMap<>();
        for(int num:nums)
        {
            numCount.put(num,numCount.getOrDefault(num,0)+1);
        }
        for(int num:nums)
        {
            //如果爲0則跳過
            if(numCount.getOrDefault(num,0)==0)
            {
                continue;
                //如果大於0,並且前面有連續的,優先和前面組隊,因爲和後面組隊
                //和可能出現一個和兩個的情況
            }else if(count.getOrDefault(num-1,0)>0)
            {
                numCount.put(num,numCount.getOrDefault(num,0)-1);
                count.put(num-1,count.getOrDefault(num-1,0)-1);
                count.put(num,count.getOrDefault(num,0)+1);
                //如果不能和前面組隊,那麼就和後面組隊
            }else if(numCount.getOrDefault(num+1,0)>0&&numCount.getOrDefault(num+2,0)>0)
            {
                numCount.put(num,numCount.getOrDefault(num,0)-1);
                numCount.put(num+1,numCount.getOrDefault(num+1,0)-1);
                numCount.put(num+2,numCount.getOrDefault(num+2,0)-1);
                count.put(num+2,count.getOrDefault(num+2,0)+1);
                //i前面和後面都不能組隊,那麼它指定是單獨的了
            }else
            {
                return false;
            }
        }
        return true;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章