给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。
例如:数组 A={1,1,2}A = \{1, 1, 2\}A={1,1,2},你的程序应该输出 222 即新数组的长度,新数组为 {1,2}\{1, 2\}{1,2}。
要求:不能新开数组分配额外的空间,即常数空间限制。
输入格式
输入一个整数 n(1≤n≤1000)n(1 \leq n \leq 1000)n(1≤n≤1000)。
接下来一行 nnn 个整数 Ai(−1000≤Ai≤1000)A_i(-1000 \leq A_i \leq 1000)Ai(−1000≤Ai≤1000),表示数组 AAA 中的每个元素。
输出格式
输出一个整数,表示新数组长度。
样例输入
5 0 0 1 1 2
样例输出
3
c++我用了一个插入排序,排列数组,然后用一个for循环遍历数组。
#include<iostream> using namespace std; bool less2(int i, int j) { return i > j; } int main() { int num; cin >> num; int arr[1000]; for (int i = 0; i < num; i++) { cin >> arr[i]; } for (int i = 0; i < num-1; i++) { for (int j = i + 1; j > 0; j--) { if (less2(arr[i],arr[j])) { int d = arr[i]; arr[i] = arr[j]; arr[j] == d; } else { break; } } } int count = num; for (int i = 0; i < num-1; i++) { if (arr[i] == arr[i+1]) { count--;
}}cout << count;} Java直接调用的Set数组,非常方便。
public static void main(String args[]){ Scanner scan=new Scanner(System.in); int num=scan.nextInt(); HashSet<Integer> array=new HashSet<Integer>(); while(num-->0){ array.add(scan.nextInt()); } System.out.println(array.size()); }