【LeetCode】设计数字容器系统 Java 题解
题目描述
设计一个数字容器系统,可以实现以下功能:
在系统中给定下标处 插入 或者 替换 一个数字。返回 系统中给定数字的最小下标。请你实现一个 NumberContainers 类:
NumberContainers() 初始化数字容器系统。void change(int index, int number) 在下标 index 处填入 number 。如果该下标 index 处已经有数字了,那么用 number 替换该数字。int find(int number) 返回给定数字 number 在系统中的最小下标。如果系统中没有 number ,那么返回 -1 。
思路分析
今天的的算法题目是设计类题目。题目描述比较长,我们跟着例子来理解。
题目给出的是设计数字容器,实现 find(int number) 返回给定数字 number 在系统中的最小下标。如果系统中没有 number ,那么返回 -1 。根据这里分析,我们需要实现一个对 number 所在全部下标的排序。由于元素无重复,我们可以使用 TreeSet 来存储。TreeSet 的按照排序顺序来存储元素. 我们也可以通过比较器来精确定义按照什么样的排序顺序。实现 Comparator 方法即可。
change() 方法会修改索引位置元素的值,从而影响 number 的索引排序。因此,我们来使用 indexMap 记录 index 和 map 的关系,在修改的时候,先处理原来的值,在处理新加的值。保证数据的准确行。
具体实现代码如下,供参考。
通过代码
总结
在 Java 中排序,对于一般的纯数字,字符串排序,我们直接调用 sort() 系统函数即可, sort() 函数默认是自然排序。 当需要按照自然倒叙排列时候,在 sort() 中我们可以自定义 Comparator, Override compare() 方法实现排序。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/ee6854b4833a5c06b123f9d2c】。文章转载请联系作者。
评论