搜索和更新数组的整数值的最佳数据结构是什么?

问题描述

如果我的数组为[7,11,13,9,9,4,6],并且用户输入为10
我希望整数刚好在(或等于)10(在本例中为11)之上,并用整数-10(11-10)代替
我无法排序列表和二进制搜索,因为我必须返回已更新元素的索引。
我研究了对(索引,整数)对的排序,然后进行了二进制搜索,但是在更新之后,我不得不对对数组进行排序,以供下一次用户输入。

原始数组= [7,11,13,9,9,4,6]
排序数组= [4、6、7、9、11、13]
用户输入= 10
输出= 1(更新后的整数的索引)

更新后的排序数组= [4、6、7、9、1、13]
重新排序的数组= [1、4、6、7、9、13]
用户输入= 4
...

哪种数据结构适合实现这一目标?

解决方法

您可以使用有序集来存储(值,索引)元组。您可以定义自定义比较函数来满足您的目标(取决于所使用的编程语言)。

有序设置操作包括:

  1. 添加元素。
  2. 删除元素。
  3. 搜索元素。
  4. 搜索大于或等于给定元素的元素。
  5. 搜索大于给定元素的元素。

给定问题可以使用具有上述操作的有序集合来解决。

某些编程语言(如c ++中的 set )具有预定义的数据结构,因此您无需从头开始实现它(仅使用它即可)。有序集内部实现通常是 Red-Black Tree (c ++)或 AVL Tree

检查您的编程语言是否具有内置的有序集或使用某些包含它的库。这是一个非常有用且通用的数据结构,因此不难发现。