• leetcode面试准备:Summary Ranges


    1 题目

    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"].

    接口:public List<String> summaryRanges(int[] nums);

    2 思路

    给定一个排序好的数组,无重复的元素,返回这个数组的范围。看示例容易理解。
    顺序扫描一遍数组,用2个指针 startend来记录每一小段的范围,分割点是nums[end + 1] == nums[end] + 1),满足此条件,end指针往后移动。
    细节:处理好数组的最后一个元素:若到了最后一个元素,不进行判断nums[end + 1] == nums[end] + 1),直接进入范围的统计处理。

    复杂度: Time O(N); Space: O(1)

    3 代码

           public List<String> summaryRanges(int[] nums) {
    		final int len = nums.length;
    		List<String> result = new LinkedList<String>();
    		for (int start = 0, end = 0; end < len;) {
    			if ((end + 1 < len) && (nums[end + 1] == nums[end] + 1)) {
    				end++;
    			} else {
    				if (start == end) {
    					result.add(Integer.toString(nums[start]));
    				} else {
    					result.add(nums[start] + "->" + nums[end]);
    				}
    				end++;
    				start = end;
    			}
    		}
    		return result;
    	}
    

    4 总结

    题目简单,思路清晰,注意代码的细节。

    5 扩展

    如果数组中有重复的元素,又该如何做?

    • 多添加一个判断:nums[end + 1] == nums[end] + 1 或者 nums[end + 1] == nums[end],满足条件,end指针往后移动一位。

    6 参考

  • 相关阅读:
    .NET LINQ 数据分区
    .NET LINQ 投影运算
    .NET LINQ 限定符操作
    .NET LINQ 筛选数据
    freeswitch媒体处理方式
    freeseitch设置通道增益
    鼎信设备设置通道增益,提高音量
    freeswitch 录音
    freeswitch录音设置(不设置缓存)
    freswitch 设置sip中的callid作为用到的uuid
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/4633057.html
Copyright © 2020-2023  润新知