欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

吉大考研真题-数组去重

程序员文章站 2022-05-16 22:06:46
...

这个题为删除数组中重复的元素。检测到重复,则每个元素前移一位,再从当前元素检测一遍,总元素数减一。

顺便说一句,若题目中表明是输出....等模糊的意思,可以有个简单的做法。

如果a[i]=a[i+1] ,则将a[i+1]置0 ,即将重复的元素置为0。然后再输出的时候,a[k]==0,则不输出·即省去了复杂的移位操作。

第一个代码:最老实的方法

第二个代码:一遍哈希表

#include <stdio.h>
void fun(int a[], int n)
{
    int i, j;
    for (i = 0; i < n - 1; i++)
    {
        if (a[i] == a[i + 1])
        {
            for (j = i + 1; j < n - 1; j++)
                a[j] = a[j + 1];
            i--;
            n--;
        }
    }
    for (i = 0; i < n; i++)
    {
        printf("%d", a[i]);
    }
}

int main()
{
    int a[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 1, 1, 1};
    fun(a, 15);
    getchar();
    return 0;
}
import java.util.HashMap;
import java.util.Map;
public class Main {
    public static void fun (int before[], int n)
    {
        Map<Integer, Integer> map = new HashMap<>();
        int j=0;
        int after[]=new int[n];
        for (int i = 0; i <n ; i++)
        {
            if (!map.containsKey(before[i]))
            {
                map.put(before[i], j);
                after[j]=before[i];
                j++;
            }
        }
        for (int k = 0; k < j ; k++) {
            System.out.print(after[k]+",");
        }
    }
    public static void main(String[] args) {
        int num[] = new int[]{1, 8, 1, 9, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5};
        fun(num,15);
    }
}

 

相关标签: 考研