程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode -- Summary Ranges

LeetCode -- Summary Ranges

編輯:C++入門知識

LeetCode -- Summary Ranges


題目描述:


Given a sorted integer array without duplicates, return the summary of its ranges.


For example, given [0,1,2,4,5,7], return [0->2,4->5,7].


Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.


就是給定一個已排序的數組,返回一個字符串數組,每個字符串表示為元素區間的合並。


本題是典型的two pointer 問題。


思路:
一次遍歷,使用two pointer方法,from 表示區間的起始元素,to表示區間的結束元素。
如果相鄰元素nums[i]和nums[i-1]差值為1,區間范圍+1:to = nums[i] ,注意最後元素的處理。


否則:
如果from不等於to:
將range = [from,to]添加到解集中,並更新from的位置。
如果from和to相等:
將range=from(或to)添加到解集
注意末尾元素的判斷(如果已打末尾,添加末尾元素)


實現代碼:




public class Solution {
    public IList SummaryRanges(int[] nums) {
        if(nums.Length == 0){
	    	return new List();
    	}
    	
    	if(nums.Length == 1){
    		return new List(){nums[0].ToString()};
    	}
    	
    	var from = nums[0];
    	var to = nums[0];
    	var ret = new List();
    	for(var i = 1 ;i < nums.Length; i++){
    		if(nums[i] - nums[i-1] == 1){
    			to = nums[i];
    			if(i == nums.Length - 1){
    				ret.Add(string.Format({0}->{1}, from , to));	
    			}
    		}
    		else{
    			if(from != to){
    				ret.Add(string.Format({0}->{1}, from , to));	
    				if(i == nums.Length - 1 && to != nums[nums.Length - 1]){
    					ret.Add(nums[i].ToString());
    				}
    			}
    			else{
    				ret.Add(from.ToString());
    				if(i == nums.Length - 1){
    					ret.Add(nums[i].ToString());
    				}
    			}
    			from = nums[i];
    			to = nums[i];
    		}
    	}
    	
    	return ret;
    }
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved