C++编程,输出给定int数组中的重复元素,元素取值有上限
2016-02-24 10:42
344 查看
如题所述,给出数组{1, 3, 4, 1, 5, 6, 4, 3, 2, 1},应该输出1, 4, 3, 1。现给定数组a,其长度为n,其中元素取值上限为max。要求时间复杂度为o(n),空间复杂度尽可能地小。
考虑位运算的方法,创建一个char型数组c,保证此数组中元素的总位数(8*x)不小于max,初始值全为char(0)。遍历数组a,将其元素数值作为下标标记c中对应位置。若已被标记,则说明元素重复。代码如下。
考虑位运算的方法,创建一个char型数组c,保证此数组中元素的总位数(8*x)不小于max,初始值全为char(0)。遍历数组a,将其元素数值作为下标标记c中对应位置。若已被标记,则说明元素重复。代码如下。
#include<iostream> using namespace std; void printDuplicate(int *a, int n, int max) { int i, m = max / 8 + 1, i1, i2; char *c = new char[m], t; for (i=0; i<m; i++) { c[i] = char(0); } for (i=0; i<n; i++) { t = char(1); i1 = a[i] / 8; //i1表示对应位置在第i1个字符上 i2 = a[i] % 8; //i2表示对应位置在第i1个字符的i2位上 t = t << i2; if (char(c[i1] & t) == char(0)) { c[i1] = c[i1] | t; } else { cout << a[i] << endl; } } } void main() { int a[] = {1, 3, 4, 1, 5, 6, 4, 3, 2, 1}; printDuplicate(a, 10, 6); }
相关文章推荐
- C++学习笔记:3.3.5 继承中的同名成员变量和函数
- C++基础::运算符重载
- c语言入门之项目3.7——用for循环输出一个等腰直角三角形
- C++语言-02-函数
- C++基础::shared_ptr 编程细节(三)
- C++ inline 函数
- C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序
- cl命令行编译Cpp
- C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)
- 1、C++的的升级
- c语言入门之项目3.5——利用for循环输出一个三角形
- c语言入门之项目3.6——利用for循环输出一个直角三角形
- c++ 虚函数
- C++学习笔记:继承中的构造与析构
- 函数副本机制
- C++基本概念----构造函数和析构函数
- iOS小明开发笔记(二十三) (C语言之堆栈入门--堆和栈的区别)
- iOS小明开发笔记(二十二) (C语言之内存四区和函数调用模型)
- VC++问题
- c语言2进制文件操作