Acwing3764 唯一最小数(水题)

题目描述

给定一个长度为 n 的整数数组,找到数组中只出现过一次的数当中最小的那个数,输出它的下标。如果不存在,输出-1。
原题链接:https://www.acwing.com/problem/content/description/3764/

解法

读入的时候记录ai出现的次数,再扫一遍对出现次数为1的数更新最小值即可,每组数据的复杂度均为O(n)。
不要memset sizeof(a), 可以改成(n+1)*4.

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int T, t, n, ans, num; 
int a[N], b[N];
int main() {
	scanf("%d", &T);
	while (T--) {
		ans = N, num = -1;
		//memset(a, 0, sizeof(a));
		//memset(b, 0, sizeof(b));
		for (int i = 1; i <= n; i++) a[i] = b[i] = 0;
		scanf("%d", &n);
		for (int i = 1; i <= n; i++) {
			scanf("%d", &a[i]);
			b[a[i]] ++;
		}
		for (int i = 1; i <= n; i++) {
			if (b[a[i]] == 1 && a[i] < ans) ans = a[i], num = i;
		}
		printf("%d\n", num);	
	} 
  return 0;
}

posted @ 2021-07-08 23:01  _vv123  阅读(79)  评论(0)    收藏  举报