[算法与数据结构][array operations][leetcode228:medium]Summary Ranges

关于leetcode系列博客,用于刷题记录。
不求多求精,希望举一反三,希望一道题有一道题的收获。
这篇文章,会给定一个文章结构,定义用于分析题目,总结知识的框架

1. 读题

题目链接 leetcode228

输入

  • 是什么?
    • 数组
  • 输入格式
    • vector
  • 关键字
    • 有序的
    • 无重复元素
    • 整数:

题目中有新定义么?

  • 新定义的名字
    • range summary
  • 通过例子进行理解
    什么是summary?

Input: [0,1,2,4,5,7]
Output: [“0->2”,“4->5”,“7”]
Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.

  • 重新《等价》表述定义
  1. 和左右元素不相邻的元素构成range
  2. 一个子数组,符合 当前元素比右侧元素小1的元素构成,最后一个作为右侧的元素包括在内

输出

  • 是什么?
    • 数组的range summary
  • 格式
    • 单个元素的range输出字符串:“元素”
    • 多个元素的range输出字符串:“左边界->右边界”
    • 输出每个range的字符串表示组成的vector

复杂度要求是什么

2. API设计

  • 输入是什么?
    • 数据类型
    • 是否需要做合法检查
      • 数组?是否需要做长度检查,最小长度,最大长度,数据类型
      • 指针?是否为空?类型检查?可转换性?
    • 输入参数可读、可写情况如何?
  • 输出是什么?
    • 输出格式是什么?
  • 由谁来调用?
    • 封装成函数?
    • 封装成类?
    • 跨语言调用?
    • 库函数, export symbol
      (leet code 可以省略)

3 本题中的边界条件

  • 有序数组:升序还是降序;有没有重复,关系到“”连续”的定义
  • 整数:有符号还是无符号,32位还是64位,还是大整数
  • 数组长度是多少?是否可以为空,数组最长是多少,数组的规模是多大,有没有可能爆内存
  • 整数运算时有没有可能溢出?
    和积溢出,无符号数溢出,除0等溢出
  • 关于数据计算,有没有整数浮点混合计算,有没有浮点计算数值稳定性的问题
  • 自己考虑几个边界case
    • 数组长度为空
      -数组只有一个元素
    • 单个元素的range出现在最左侧,中间,最右侧的情况
    • 最后一个元素属于range和不属于range的情况

4 思路

  • 初始思路
    标记位,标记进入每个range的状态,记录左右边界2个int,然后range结束合成
  • 优化思路
    每个range一个字符串,在range开始时候加入,在range结束是加入->右侧,好处是处理单个元素的range的时候比较方便。
  • 时空复杂度条理分析
    • 平均复杂度
    • 最好、最坏复杂度
  • 其他人写得比我好的地方
  • 我比其他人写得好的地方

4 take away

值得学习的代码

  • 代码片段
  • 代码范式
  • 技巧
  • 优雅的代码

领悟出的新的思考、分析思路

  • 对于这一类问题,自己思路上的欠缺,有没有可以学习的
  • 思考在逻辑上有没有不足,有没有可以学习的

可一般化的边界条件

  • 1
  • 2

你可能感兴趣的:(算法和数据结构)