2239. 找到最接近 0 的数字
2023-03-07 21:15 作者:目标力扣Knight | 我要投稿

概述: 找到绝对值最小的数字,当绝对值相同时,取其中较大的数字
方法一:缓存 + 排序
遍历整个 nums
数组,按照数对的方式---> 原数:其绝对值 将其缓存到数组 ans 中,对数 ans 数组编制排序,按照原数升序,其绝对值降序的方式排列,取得数组 ans 首元素中第二个位序的数字即可;
Python版本
C++版本
复杂度分析
时间复杂度:O(Nlogn)。一次遍历与排序选择其中复杂度较高的,
Python
默认排序使用的是Timesort
。空间复杂度:O(N)。此处 n 指的是
nums
数组的长度。
方法二:滑动数组
分别用两个变量保存上一次遍历时最小距离和最大原数,遍历时,最小距离若减小则同时更新最大原数为当前数,若为发生变更,则需要分别考虑,若因当前数大于上一次最小距离则直接跳过,若当前值为上一次原数的绝对值则直接更新原数。
Python版本
C++版本
复杂度分析
时间复杂度:O(N)。此处的 n 指的是数组
nums
的长度。空间复杂度:O(1)。除返回值外无额外空间占用。
备注
此题可以抽象出
C++
语法通用模板,即:数对数组的申请,插入,读出以及取得首元素第二个位序的值三种操作;