<p>设计一个数字容器系统,可以实现以下功能:</p> <ul> <li>在系统中给定下标处 <strong>插入</strong> 或者 <strong>替换</strong> 一个数字。</li> <li><strong>返回</strong> 系统中给定数字的最小下标。</li> </ul> <p>请你实现一个 <code>NumberContainers</code> 类:</p> <ul> <li><code>NumberContainers()</code> 初始化数字容器系统。</li> <li><code>void change(int index, int number)</code> 在下标 <code>index</code> 处填入 <code>number</code> 。如果该下标 <code>index</code> 处已经有数字了,那么用 <code>number</code> 替换该数字。</li> <li><code>int find(int number)</code> 返回给定数字 <code>number</code> 在系统中的最小下标。如果系统中没有 <code>number</code> ,那么返回 <code>-1</code> 。</li> </ul> <p> </p> <p><strong>示例:</strong></p> <pre> <strong>输入:</strong> ["NumberContainers", "find", "change", "change", "change", "change", "find", "change", "find"] [[], [10], [2, 10], [1, 10], [3, 10], [5, 10], [10], [1, 20], [10]] <strong>输出:</strong> [null, -1, null, null, null, null, 1, null, 2] <strong>解释:</strong> NumberContainers nc = new NumberContainers(); nc.find(10); // 没有数字 10 ,所以返回 -1 。 nc.change(2, 10); // 容器中下标为 2 处填入数字 10 。 nc.change(1, 10); // 容器中下标为 1 处填入数字 10 。 nc.change(3, 10); // 容器中下标为 3 处填入数字 10 。 nc.change(5, 10); // 容器中下标为 5 处填入数字 10 。 nc.find(10); // 数字 10 所在的下标为 1 ,2 ,3 和 5 。因为最小下标为 1 ,所以返回 1 。 nc.change(1, 20); // 容器中下标为 1 处填入数字 20 。注意,下标 1 处之前为 10 ,现在被替换为 20 。 nc.find(10); // 数字 10 所在下标为 2 ,3 和 5 。最小下标为 2 ,所以返回 2 。 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li><code>1 <= index, number <= 10<sup>9</sup></code></li> <li>调用 <code>change</code> 和 <code>find</code> 的 <strong>总次数</strong> 不超过 <code>10<sup>5</sup></code> 次。</li> </ul>