欢迎光临散文网 会员登陆 & 注册

2239. 找到最接近 0 的数字

2023-03-07 21:15 作者:目标力扣Knight  | 我要投稿

2239. 找到最接近 0 的数字

概述: 找到绝对值最小的数字,当绝对值相同时,取其中较大的数字

方法一:缓存 + 排序

遍历整个 nums 数组,按照数对的方式---> 原数:其绝对值 将其缓存到数组 ans 中,对数 ans 数组编制排序,按照原数升序,其绝对值降序的方式排列,取得数组 ans 首元素中第二个位序的数字即可;

Python版本

         

C++版本

复杂度分析

  • 时间复杂度:O(Nlogn)。一次遍历与排序选择其中复杂度较高的,Python 默认排序使用的是 Timesort

  • 空间复杂度:O(N)。此处 n 指的是 nums 数组的长度。

方法二:滑动数组

分别用两个变量保存上一次遍历时最小距离和最大原数,遍历时,最小距离若减小则同时更新最大原数为当前数,若为发生变更,则需要分别考虑,若因当前数大于上一次最小距离则直接跳过,若当前值为上一次原数的绝对值则直接更新原数。

Python版本

 


C++版本

复杂度分析

  • 时间复杂度:O(N)。此处的 n 指的是数组 nums 的长度。

  • 空间复杂度:O(1)。除返回值外无额外空间占用。

备注

  1. 此题可以抽象出C++语法通用模板,即:数对数组的申请,插入,读出以及取得首元素第二个位序的值三种操作;

  2. 第二种解法中,判断值是否更新实际上是通过比较值是否相等完成的,此举联立上式可能造成二象性,即一个判断条件可能衍生两种合法的值,不够唯一,因此需要进一步判断。


2239. 找到最接近 0 的数字的评论 (共 条)

分享到微博请遵守国家法律