zoukankan      html  css  js  c++  java
  • 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 参考

  • 相关阅读:
    linux 上安裝lnmp
    html 禁用点击事件
    nftables 是什么? 提供什么功能? 如何使用?
    ESXi主机RAID卡_HBA卡_网卡 型号_固件_驱动查询
    Celery Beat定时任务
    Centos 7/8 安装Rabbit-MQ
    Celery 最佳实践
    Django 3.0 + Celery 4.4 + RabbitMQ
    C语言Socket示例
    深入理解计算机系统 — 读书笔记
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/4633057.html
Copyright © 2011-2022 走看看