当前位置: 首页 > news >正文

排序题目:最小绝对差

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:最小绝对差

出处:1200. 最小绝对差

难度

2 级

题目描述

要求

给定整数数组 arr \texttt{arr} arr,其中每个元素都不相同,找到所有具有最小绝对差的元素对。

按升序的顺序返回元素对列表,每个元素对 [a, b] \texttt{[a, b]} [a, b] 满足:

  • a, b \texttt{a, b} a, b 是数组 arr \texttt{arr} arr 中的元素。
  • a < b \texttt{a} < \texttt{b} a<b
  • b − a \texttt{b} - \texttt{a} ba 等于数组 arr \texttt{arr} arr 中的任意两个元素的最小绝对差。

示例

示例 1:

输入: arr = [4,2,1,3] \texttt{arr = [4,2,1,3]} arr = [4,2,1,3]
输出: [[1,2],[2,3],[3,4]] \texttt{[[1,2],[2,3],[3,4]]} [[1,2],[2,3],[3,4]]
解释:最小绝对差是 1 \texttt{1} 1。将所有绝对差等于 1 \texttt{1} 1 的元素对按升序的顺序加入列表并返回。

示例 2:

输入: arr = [1,3,6,10,15] \texttt{arr = [1,3,6,10,15]} arr = [1,3,6,10,15]
输出: [[1,3]] \texttt{[[1,3]]} [[1,3]]

示例 3:

输入: arr = [3,8,-10,23,19,-4,-14,27] \texttt{arr = [3,8,-10,23,19,-4,-14,27]} arr = [3,8,-10,23,19,-4,-14,27]
输出: [[-14,-10],[19,23],[23,27]] \texttt{[[-14,-10],[19,23],[23,27]]} [[-14,-10],[19,23],[23,27]]

数据范围

  • 2 ≤ arr.length ≤ 10 5 \texttt{2} \le \texttt{arr.length} \le \texttt{10}^\texttt{5} 2arr.length105
  • -10 6 ≤ arr[i] ≤ 10 6 \texttt{-10}^\texttt{6} \le \texttt{arr[i]} \le \texttt{10}^\texttt{6} -106arr[i]106

解法

思路和算法

当数组有序时,每个元素的相邻元素是数组中与该元素最接近的元素,因此最小绝对差一定是排序后的数组中的两个相邻元素之差。

首先将数组排序,然后遍历排序后的数组,计算每一对相邻元素的绝对差,即可得到最小绝对差。

得到最小绝对差之后,再次遍历排序后的数组,计算每一对相邻元素的绝对差,当相邻元素的绝对差等于最小绝对差时,将这一对相邻元素添加到结果列表中,遍历结束之后即可得到所有具有最小绝对差的元素对。

由于是遍历排序后的数组寻找具有最小绝对差的元素对,因此遍历元素对的顺序是递增顺序,可以确保结果列表中的元素对按升序的顺序排列。

代码

class Solution {public List<List<Integer>> minimumAbsDifference(int[] arr) {Arrays.sort(arr);int minDiff = arr[1] - arr[0];int length = arr.length;for (int i = 2; i < length; i++) {minDiff = Math.min(minDiff, arr[i] - arr[i - 1]);}List<List<Integer>> pairs = new ArrayList<List<Integer>>();for (int i = 1; i < length; i++) {if (arr[i] - arr[i - 1] == minDiff) {List<Integer> pair = new ArrayList<Integer>();pair.add(arr[i - 1]);pair.add(arr[i]);pairs.add(pair);}}return pairs;}
}

复杂度分析

  • 时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是数组 arr \textit{arr} arr 的长度。排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn) 的时间,每次遍历数组需要 O ( n ) O(n) O(n) 的时间,总时间复杂度是 O ( n log ⁡ n ) O(n \log n) O(nlogn)

  • 空间复杂度: O ( log ⁡ n ) O(\log n) O(logn),其中 n n n 是数组 arr \textit{arr} arr 的长度。排序需要 O ( log ⁡ n ) O(\log n) O(logn) 的递归调用栈空间。注意返回值不计入空间复杂度。

http://www.lryc.cn/news/354830.html

相关文章:

  • 沃飞携AE200真机亮相澳门,全方位赋能城市低空出行
  • 判断当前系统是linux、windows还是MacOS (python)
  • Minikube部署单节点Kubernetes
  • leetcode-顺时针旋转矩阵-111
  • 解决GoLand无法Debug
  • 云原生周刊:K8s 上的 gRPC 名称解析和负载平衡
  • 从0开始回顾ElasticSearch
  • 小阿轩yx-Shell编程之条件语句
  • MyBatis-Plus 从入门到精通
  • 爬虫利器Frida RPC入门——夜神模拟器环境篇
  • 猫狗分类识别模型建立①数据标记
  • FME学习之旅---day28
  • vue3项目中字典和全局方法的创建与使用
  • 51-54 Sora能制作动作大片还需要一段时间 | DrivingGaussian:周围动态自动驾驶场景的复合高斯飞溅
  • 数据挖掘实战-基于余弦相似度的印度美食推荐系统
  • 深入探索DreamFusion:文本到3D生成的革命性技术
  • JSP期末要点复习
  • AJAX(JavaScript版本)
  • 框架学习之SpringMVC学习笔记(一)
  • 数据集005:螺丝螺母目标检测数据集(含数据集下载链接)
  • Swift 类和结构体
  • 网络安全相关面试题(hw)
  • 前端开发攻略---三种方法解决Vue3图片动态引入问题
  • 零售EDI:Target DVS EDI项目案例
  • AWS安全性身份和合规性之AWS Firewall Manager
  • R实验 随机变量及其分布
  • rapidssl泛域名https600元一年
  • 月薪5万是怎样谈的?
  • linux下宝塔负载100%解决方法
  • 【C++】STL快速入门基础