我在为数据结构类的数组结构实现add方法时遇到了麻烦,而且我无法找到一种方法来解决如何正确执行此操作。我知道这是一种处理数据的不切实际的方法,但是嘿数据结构。
说明:
add方法确保此set包含指定的元素。 不允许重复或空值。该方法返回 如果修改了该集合(即添加了元素),则返回true 除此以外。如果数组已满,则必须“调整”数组两次 一样大。注意对泛型类型参数T的约束 ArraySet类确保值的自然顺序 存储在ArraySet中。您必须维护内部数组 始终提升自然秩序。添加的时间复杂度 方法必须是O(N),其中N是集合中元素的数量。
我们只能使用Array和Iterator类!请不要使用arraylists给出答案。
我的Psudocode是:
检查元素是否存在,检查数组是否已满,如果是双倍大小, 比较元素以找到我们可以维持自然顺序的索引 并插入元素或找到副本并退出,复制数组 自上而下并与插入的元素和底部组合。
实际代码:
//Given Fields
T[] elements;
int size;
//Add Method
public boolean add(T element) {
if (element != null) {
int index = -1;
int last_compare = -1;
for (int i = 0; i < size; i++) {
int compare = elements[i].compareTo(element);
if (compare > 0 && last_compare < 0) { //larger element, last element was smaller.
if (isFull()) {
resize(elements.length * 2);
}
index = i;
break;
} else if (compare == 0) {
return false;
}
last_compare = compare;
}
T[] temp = null;
//Need to copy the array here
} else {
return false;
}
}
我不知道在保持O(N)时间复杂度的同时如何正确插入。
有什么想法吗?