给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。

给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。

例如:数组 A={1,1,2},你的程序应该输出 2 即新数组的长度,新数组为 {1,2}。

要求:不能新开数组分配额外的空间,即常数空间限制。

输入格式

输入一个整数 n(1≤n≤1000)。

接下来一行 n 个整数 A i (−1000≤A i ≤1000),表示数组 A 中的每个元素。

输出格式

输出一个整数,表示新数组长度。

样例输入 复制
5
0 0 1 1 2

样例输出 复制
3

import java.util.Scanner;

import java.util.HashMap;
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] array;
        array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = scanner.nextInt();
        }
        f(array);
    }
    public static void f(int arr[]){
        HashMap sHashMap = new HashMap();
        for (int i = 0; i < arr.length; i++) {
             sHashMap.put(arr[i], i);
        }
        System.out.println(sHashMap.size());
       
    }
}

### 回答1: 下面是参考代码: ```c #include <stdio.h> void bubble_sort(int a[], int n); int main() { int n, i; int a[20]; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } bubble_sort(a, n); return 0; } void bubble_sort(int a[], int n) { int i, j, flag; for (i = 0; i < n - 1; i++) { flag = 0; for (j = 0; j < n - 1 - i; j++) { if (a[j] > a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; flag = 1; } } for (j = 0; j < n; j++) { printf("%d ", a[j]); } printf("\n"); if (flag == 0) { break; } } } ``` 输入示例: ``` 10 2 5 3 1 6 4 8 9 7 10 ``` 输出示例: ``` 2 3 1 5 4 6 8 7 9 10 2 1 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 ``` ### 回答2: 冒泡排序是一种基本的排序算法,其基本思想是通过相邻元素之间的比较和交换来实现整个序列的排序。 首先,根据输入的正整数n,我们定义一个长度为n的整数数组a。 然后,我们根据输入的n个整数,将其依次放入数组a中。 接下来,我们进行冒泡排序。具体的排序步骤如下: 1. 从数组的第一个元素开始,比较相邻的两个元素,如果前一个元素大于后一个元素,则交换这两个元素的位置。 2. 继续向后比较相邻元素重复以上步骤,直到最后一个元素。 3. 重复以上步骤,每次都将待排序的元素减一,直到所有元素都排序完毕。 在排序的过程中,我们可以输出中间结果,即每一步后a[0]∼a[n−1]的值,每个字后面有一个空格。 下面是一个示例: 输入: 7 3 5 1 4 2 6 7 输出: 3 1 4 2 5 6 7 1 3 2 4 5 6 7 1 2 3 4 5 6 7 这里,输入的正整数n为7,接下来的一行给出了7个整数。经过冒泡排序后,输出排序过程中的中间结果。首先,输出了第一次排序后的结果,然后输出了第二次排序后的结果,最后输出了经过三次排序后的最终结果。每次输出的结果中,都是按照升序排列数组元素。 ### 回答3: 冒泡排序是一种简单但效率较低的排序算法,其基本思想是通过相邻元素之间的比较和交换,逐步将最大的元素往后移动。 首先,读入一个不超过20的正整数n作为数组长度。然后,读入n个整数存入数组中。 接下来,按照冒泡排序算法的步骤,逐步将数组中的元素进行排序。具体步骤如下: 1. 从数组的第一个元素开始,依次与其相邻的后一个元素进行比较,如果前一个元素大于后一个元素,则将两个元素交换位置。 2. 继续进行步骤1,直到将数组中最大的元素移到最后一个位置。 3. 重复步骤1和步骤2,但每次循环只需要比较及交换到上次已经排序好的位置之前的元素。 在每一步排序完成后,输出当前数组中的元素。即依次按照a[0]~a[n-1]的顺序输出元素。 最终,输出排序过程中对应每一步的中间结果,即经过每一次排序后的数组。每个字后面有一个空格,表示中间结果之间的间隔。 注意,中间结果的量为n次,即总共进行n次排序。 举例来说,假设输入为: 6 3 2 4 6 1 5 经过冒泡排序的排序过程为: 2 3 4 6 1 5 2 3 4 1 6 5 2 3 1 4 6 5 2 1 3 4 6 5 1 2 3 4 6 5 1 2 3 4 5 6 最后的输出结果为: 2 3 4 6 1 5 2 3 4 1 6 5 2 3 1 4 6 5 2 1 3 4 6 5 1 2 3 4 6 5 1 2 3 4 5 6 这样,我们就按照题目要求通过冒泡排序法进行了排序,并输出了排序过程中每一步的中间结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值