Leetcode 228. Summary Ranges

Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Example 2:
Input: [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]

思路:
關鍵點是確定何時加入一個新的區間,我們需要判斷當前元素是否比它的前一個元素大1。
如果當前元素比前一個元素大1,更新區間最大元素;否則,判斷區間起始元素和最大元素是否相等,來決定新增區間是一個數字還是a->b。
對于數組中最后一個元素,需要左一次插入區間的特殊處理。

public List<String> summaryRanges(int[] nums) {
    List<String> res = new ArrayList<>();
    if (nums == null || nums.length == 0) {
        return res;
    }
    if (nums.length == 1) {
        res.add(String.valueOf(nums[0]));
        return res;
    }

    //define variable
    int pre = nums[0], start = nums[0], end = nums[0];
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] == pre + 1) {
            end = nums[i];
        }
        if (nums[i] != pre + 1) {
            if (start == end) {
                res.add(String.valueOf(start));
            } else {
                res.add(String.valueOf(start) + "->" + String.valueOf(end));
            }
            start = nums[i];
            end = nums[i];
        }
        if (i == nums.length - 1) {
            if (start == end) {
                res.add(String.valueOf(start));
            } else {
                res.add(String.valueOf(start) + "->" + String.valueOf(end));
            }
        }
        pre = nums[i];
    }

    return res;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,937評論 18 139
  • 上海翌雪科技首款VR游戲大作《末世GNN》是公司歷時數月,精心打造的一款真人對抗射擊游戲。游戲使用UE4引擎,通過...
    虛擬99閱讀 253評論 0 0
  • 這是一篇給“做書”公眾號的投稿,非常令人高興的是,稿件被公眾號發布了。只不過,做書的編輯重新幫我起了一個名字,調整...
    王小常閱讀 493評論 2 1
  • 開始閱讀文章之前,花幾分鐘想一下,你是否有以下的經歷呢? 學生時代,你是個好學聽話的學生,你認真聽講,更是認真做筆...
    月青山閱讀 555評論 3 9