-
#include <iostream> /* 面试题3:数组中重复的数字: 问题: 长为n的数组,每个元素大小都在0到n-1之间,请找出其中重复的数字 解决: 1. 排序o(nlogn) 2. 用哈希表,哈希函数将键key映射为数组下标o(n),空间复杂度(n) 3. 没有重复且排好序时,下标和值应该是相等的,所以扫描数组: 当该处的值不在其位时,把它放到它应在的位置上 当该处的值在其位时,扫描下一个元素 一句话:把不再其位的值放到它应在的位置上 */ using namespace std; const int MAX = 1000; int array_n[MAX]; int n; int main(void) { cin >> n; for (int i = 0; i < n; i++) cin >> array_n[i]; int i=0; bool find_duplicates = false; int duplicates = 0; while(true) { if(i == n) break; // 在其位时,扫描下一个元素 if (array_n[i] == i) i++; else { // 交换位置前查重 if (array_n[array_n[i]] == array_n[i]) { find_duplicates = true; duplicates = array_n[i]; break; } else { // 不在其位时,把它放到它应在的位置上 int temp = array_n[array_n[i]]; array_n[array_n[i]] = array_n[i]; array_n[i] = temp; } } } if (find_duplicates) cout << duplicates; else cout << "not find"; return 0; }
面试题3:数组中重复的数字
猜你喜欢
转载自www.cnblogs.com/jkn1234/p/8876580.html
今日推荐
周排行