邻值查找

给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求: min1≤j<i|Ai−Aj|

以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj 较小的那个。

输入格式
第一行输入整数n,代表序列长度。
第二行输入n个整数A1…An,代表序列的具体数值,数值之间用空格隔开。

输出格式
输出共n-1行,每行输出两个整数,数值之间用空格隔开。
分别表示当i取2~n时,对应的min1≤j<i|Ai−Aj|和Pi的值。

数据范围
n≤105,|Ai|≤109
输入样例:
3
1 5 3
输出样例:
4 1
2 1


这里提供一个双向链表的写法


EXAMPLE IN PUT
10
4 5 6 1 2 3 7 8 9 10

OUTPUT
1 1
1 2
3 1
1 4
1 5
1 3
1 7
1 8
1 9

具体思路如下图
Befor

value 4 5 6 1 2 3 7 8 9 10
id 1 2 3 4 5 6 7 8 9 10

我们先标记初始值的id

Sorted 我们在前后设置了两个哨兵。

value 1 2 3 4 5 6 7 8 9 10
id 0 4 5 6 1 2 3 7 8 9 10 11

然后从后面枚举

value 1 2 3 4 5 6 7 8 9 10
id 0 4 5 6 1 2 3 7 8 9 10 11

得到
相邻最小可选的 id——9 11
———————value—1 ∞
我们选出最佳的 id 是 9 .
如图,我们删去这个元素,把这个删去元素的前后相连。
不断重复如上操作,最后到只剩一个元素。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1e5 + 10;
int p[N], l[N], r[N], n;
pair<int, int> a[N], ans[N];
int main() {scanf("%d", &n);for(int i = 1; i <= n; i++) {scanf("%d", &a[i].first);a[i].second = i;}a[0].first = 1e9;a[n + 1].first = -1e9;sort(a + 1, a + n + 1);for(int i = 1; i <= n; i++) {p[a[i].second] = i;l[i] = i - 1;r[i] = i + 1;}for(int i = n; i >= 2; i--) {int pos = p[i];int Left = l[pos];int Right = r[pos];int vl = abs(a[pos].first - a[Left].first);int vr = abs(a[pos].first - a[Right].first);if(vl <= vr) {ans[i].first = vl;ans[i].second = a[Left].second;}else {ans[i].first = vr;ans[i].second = a[Right].second;}r[Left] = Right;l[Right] = Left; }for(int i = 2; i <= n; i++)printf("%d %d\n", ans[i].first, ans[i].second);return 0;
}

邻值查找—算法进阶指南相关推荐

  1. 阿里大佬总结的算法进阶指南,助你进大厂!

    大家好,我是林哥! 最近一个来自阿里的大佬总结了一份秋招算法进阶指南<LeetCode-Go>,全文一共有150多页,包含了所有常见的核心算法题目,助力大家在秋招末期拿到满意的Offer. ...

  2. 卧槽!阿里《算法进阶指南》火了,完整版 开放下载!

    最近一个来自阿里的大佬总结了一份秋招算法进阶指南<LeetCode-Go>,全文一共有150多页,包含了所有常见的核心算法题目,助力大家在秋招末期拿到满意的Offer. 以下是这份阿里秋招 ...

  3. 写给前端的算法进阶指南,我是如何两个月零基础刷200题 等推荐

    大家好,我是若川. 话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,一起共同进步. 前端从进阶到入院 作者ssh就职于字节跳动基 ...

  4. 阿里《算法进阶指南》,完整版开放下载!

    大家好,我是树哥. 最近一个来自阿里的大佬总结了一份秋招算法进阶指南<LeetCode-Go>,全文一共有 150 多页,包含了所有常见的核心算法题目,助力大家在秋招末期拿到满意的 Off ...

  5. 数据结构总结1(火车进栈/兔子与兔子/括号画家/Editor/邻值查找/最大子序和/前缀统计/Phone List/The XOR Largest Pair)

    问题 A: 火车进栈 题目描述 这里有n列火车将要进站再出站-- 但是,每列火车只有1节-那就是车头-- 描述 有n列火车按1到n的顺序从东方左转进站,这个车站是南北方向的,它虽然无限长,只可惜是一个 ...

  6. 李煜东算法进阶指南打卡题解

    算法竞赛进阶指南 一.0x00 基本算法 1)位运算 2)递推与递归 3)前缀和与差分 4)二分 5)排序 6)倍增 7)贪心 8)习题 二.0x10 基本数据结构 1)栈 2)队列 3)链表与邻接表 ...

  7. 写给前端的算法进阶指南,我是如何两个月零基础刷200题

    前言 最近国内大厂面试中,出现 LeetCode 真题考察的频率越来越高了.我也观察到有越来越多的前端同学开始关注算法这个话题. 但是算法是一个门槛很高的东西,在一个算法新手的眼里,它的智商门槛要求很 ...

  8. 算法进阶指南:0x17:荷马史诗

    原题链接 追逐影子的人,自己就是影子. --荷马 达达最近迷上了文学. 她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的<荷马史诗>. 但是由<奥德赛>和 ...

  9. 0x13链表与邻接表之邻值查找

    题目链接:https://www.acwing.com/problem/content/138/ 参考链接:https://blog.csdn.net/sdz20172133/article/deta ...

最新文章

  1. Asp.net 序列化应用实例(转载)
  2. [Machine Learning]kNN代码实现(Kd tree)
  3. 前端进阶之路 0.1+0.2 !== 0.3?
  4. Spring4.X系列之Spring JDBC
  5. 和你谈谈数据分析报告
  6. leetcode-92-反转链表②
  7. 遇到attemp to invoke virtual method
  8. OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()
  9. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?
  10. Vue.js组件的重要选项
  11. java公司自己封装的框架_SpringBoot封装自己的Starter的实现方法
  12. send tcp char far_wemos D1 arduino项目实战1-TCP协议连接Tlink平台③
  13. Stata12文件转码为Stata15格式解决办法
  14. PR曲线和ROC曲线概念及其区别
  15. 软件工程师找不到工作的四个原因
  16. java 用户留存率_【java】mongodb 数据统计(留存率) 应该怎么实现?
  17. 拒绝从入门到入土:初识C语言
  18. 网易2019实习生招聘编程题集合 - 题解
  19. 神还原女神照片!GAN 为百年旧照上色
  20. 量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程

热门文章

  1. 指数分布java_python-numpy-指数分布实例详解
  2. html的canvas标签用法,html5中关于canvas标签用法(绘图)
  3. 百万大奖参赛攻略 | 让程序员走向财富自由
  4. 页面置换算法先进先出java_页面替换算法(FCFS,LRU,OPT三种)
  5. qt显示echart_Qt配置,载入html,Echart, 交互
  6. python怎么获取lol皮肤名称_LOL手游免费皮肤获得方法 LOL手游皮肤怎么获得
  7. 一小时过c语言,一小时学会C语言.docx
  8. 手把手教你用Java的swing制作计算器
  9. dialog element 删掉标题_ElementUI 销毁Dialog数据(简单粗暴)
  10. 用gradle启动java项目_构建Java项目