任务是创建第二个数组,其中每个数字仅包含一次。但是,顺序应与原始数组中第一次出现的顺序相对应。解数组在主程序中输出。
我已经编写了这段代码:
public static int[] sortSecArr (int[] arr){
int dumpArr[] = new int[arr.length];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length; j++){
if(arr[i] == arr[j]){
dumpArr[i] = arr[i] ;
}
}
}
return dumpArr;
}
我尝试将其分成两个for循环,然后将
arr[i]
与arr[j]
进行比较,当它不同时,它应该进入dumpArr
。
我知道有些问题,但不知道这段代码需要更改什么。
您正在做的是从相同的索引开始进行比较 - 这是第一个错误 - 然后将项目添加到哑数组(如果存在) - 这是第二个错误。
您可以使用 HashSet 来帮助您确定唯一性,使用 List 来帮助您确定顺序并创建一个比所需大小更大的数组,然后将其转换为这样的数组:
public static int[] sortSecArr(int[] arr) {
Set<Integer> set = new HashSet<>();
List<Integer> uniqueList = new ArrayList<>();
for (int num : arr) {
if (!set.contains(num)) {
uniqueList.add(num);
set.add(num);
}
}
// Convert ArrayList to array
int[] uniqueArray = new int[uniqueList.size()];
for (int i = 0; i < uniqueList.size(); i++) {
uniqueArray[i] = uniqueList.get(i);
}
return uniqueArray;
}
不使用HashSet解决它
public static int[] sortSecArr(int[] arr) {
int uniqueCount = 0;
// Count the number of unique elements
for (int i = 0; i < arr.length; i++) {
boolean isDuplicate = false;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
uniqueCount++;
}
}
// Create the array to store unique elements
int[] uniqueArray = new int[uniqueCount];
int index = 0;
// Add unique elements to the unique array
for (int i = 0; i < arr.length; i++) {
boolean isDuplicate = false;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
uniqueArray[index++] = arr[i];
}
}
return uniqueArray;
}
如果你可以使用动态数组,你可以这样做(我用Python编写的,但你可以使用例如java
ArrayList
:
def solve(a: list[int]) -> list[int]:
answer = []
for number in a:
if number not in answer:
answer.append(number)
return answer
assert solve([1, 1, 2, 1, 2, 5, 6, 2, 3, 1]) == [1, 2, 5, 6, 3]
assert solve([]) == []
assert solve([1, 2, 3]) == [1, 2, 3]
assert solve([1, 1, 1]) == [1]
assert solve([1, 2, 1, 2]) == [1, 2]
在java函数签名中将是:
public static ArrayList<Integer> solve(int[] arr);
如果您需要返回
int[]
,您需要计算输入数组中有多少个唯一元素。您可以使用 set
或 hashmap
来完成此操作
如果您不允许使用地图、集合等,您可以:
i
迭代 arr,使用 j
迭代新 arrint new_arr[] = new int[arr.length()];
int j_max;
while (i < arr.length()){
if arr[i] not in new_arr then
new_arr[j++] = arr[i++]
j_max = j
else
i++
}
这是伪代码
return Arrays.copyOfRange(new_arr, 0, j_max-1);