228. 汇总区间

张开发
2026/4/6 21:56:23 15 分钟阅读

分享文章

228. 汇总区间
原题https://leetcode.cn/problems/summary-ranges/description/题目描述给定一个无重复元素的有序整数数组nums。区间[a,b]是从a到b包含的所有整数的集合。返回恰好覆盖数组中所有数字的最小有序区间范围列表 。也就是说nums的每个元素都恰好被某个区间范围所覆盖并且不存在属于某个区间但不属于nums的数字x。列表中的每个区间范围[a,b]应该按如下格式输出a-b如果a ! ba如果a b思路还是用一个 map 来记录每个区间的范围键为区间终点值为区间起点和终点元组。使用Enum.reduce/3先将数组转换成区间列表再将区间列表转换成字符串格式。每一步处理通过管道连接elixir 求解如下def summary_ranges(nums) do nums | Enum.reduce(%{}, fn x, acc - case Map.fetch(acc, x-1) do {:ok, {s,e}} - acc | Map.delete(x-1) | Map.put(x, {s,x}) _ - Map.put(acc, x, {x,x}) end end) | Map.values | Enum.map(fn {s, s} - #{s} {s, t} - #{s}-#{t} end) end

更多文章