当前位置: 首页 > news >正文

数据结构----结构--线性结构--顺序存储--数组

数据结构----结构–线性结构–顺序存储–数组

数组:类型相同,空间连续,长度固定

搜索:

(1)基于索引搜索,时间复杂度O(1)

(2)基于数值搜索:

​ 1.有序的:二分查找

​ 2.无需的:遍历一遍O(n)

增删:

​ 空间不够:扩容 旧数据->新数据 迁移

​ 空间足够:尾增尾删O(1) 其他增删O(n)

关于数组特性的题

第一题

题目:给一个有n个元素的数组,数组内的元素数值范围在0~n-1之间。请检测:数据有无重复出现,如果出现请报错

解决方法:1.暴力 时间复杂度O(n的平方) 空间复杂度 O(1)

​ 2.计数 时间复杂度O(n) 空间复杂度 O(n)

​ 3.排序: 时间复杂度O(看利用哪种排序) 空间复杂度 O(看利用哪种排序)

​ 4.set/map 时间复杂度O(nlog2的n次方) 空间复杂度O(nlog2的n次方)

​ 5.交换 时间复杂度O(n) 空间复杂度 O(1)

这里交换的方法最好 我们用代码实现一下

#include<iostream>
using namespace std;//判断的函数
void PanDuan(int a[],int length) {for (int i = 0; i < length;) {//遍历if (a[i] == i) {//如果下标和数对上了就下一个i++;}else {if (a[i] == a[a[i]]) {//重复cout << "错误" << endl;break;}else {//不重复交换位置int t;t = a[i];a[i] = a[a[i]];a[t] = t;}}
}
int main() {int a[] = { 0,3,2,4,1 };//定义一个数组,进行测试PanDuan(a,(sizeof(a)/sizeof(a[0])));//进入判断的函数return 0;
}

第二题

题目:一组数据,其中有一个元素只出现一次,其他元素均出现两次,请找出只出现一次的元素

解决方法:1.暴力 时间复杂度O(n的平方) 空间复杂度 O(1)

​ 2.计数 (哈希表,map)

​ 哈希表 时间复杂度O(n) 空间复杂度 O(n)

​ map 时间复杂度O(nlog2的n次方) 空间复杂度 O(n)

​ 3.异或 时间复杂度O(n) 空间复杂度 O(1)

更改题目为:一组数据,其中有两个元素只出现一次,其他元素均出现两次,请找出只出现一次的元素

最优解决方法: 第一步:整体异或

​ 第二步:找到非0位

​ 第三步:根据非0位进行分组,分为两组

​ 第四步:各组异或 就得到了只出现一次的这两个元素

用代码进行实现,如下

#include <iostream>
using namespace std;void Find(int arr[]){int res1 = 0;for (int i : arr) {//全部异或一遍 获得两个只出现一次元素的异或的结果res1 ^= i;}unsigned int res2 = 1;//从右到左找到二进制上第一个为1的while (1) {//与1进行位于if (res1 & res2) {break;}res2 = res2 << 1;}int result1 = 0;int result2 = 0;for (int i : arr) {//遍历分类并对两组数进行异或得到结果if (res2 & i) {result1 ^= i;}else {result2 ^= i;}}cout << result1 << "   " << result2 << endl;
}
int main() {int nums[] = { 1,5,5,4,4,3 };//这里是测试样例Find(nums);return 0;
}
http://www.lryc.cn/news/113383.html

相关文章:

  • docker 启动kitex 的opentelemetry
  • Excel中——日期列后添加星期
  • 谈谈DNS是什么?它的作用以及工作流程
  • Qt小项目贪吃蛇实线,主要掌握定时器、信号与槽、按键事件、绘制事件、坐标运算、随机数生成等
  • 使用HTTP隧道时如何应对目标网站的反爬虫监测?
  • 怎么样通过Bootstrap已经编译好(压缩好)的源码去查看符合阅读习惯的源码【通过Source Map(源映射)文件实现】
  • 【排序算法】python之冒泡,选择,插入,快速,归并
  • UML—用例图的那些事
  • 迷宫出口问题求解(DFS)
  • 基础算法模板
  • react Ref 的基本使用
  • 宝塔面板点击SSL闪退打不开怎么解决?
  • 如何将安卓 Gradle 模块打包发布到本地 Maven 仓库
  • 【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解
  • java.lang.IllegalArgumentException: Invalid character found in methodname
  • 【PCB专题】Allegro高速电路Xnet网络等长约束——SDIO信号为例
  • leetcode每日一练-第278题-第一个错误的版本
  • 最小生成树笔记(Prim算法Kruskal算法)
  • 4、数据清洗
  • Python-OpenCV 图像的基础操作
  • test111
  • 17. Spring 事务
  • 【C# 基础精讲】运算符和表达式
  • 【搜索】DFS连通性模型
  • 项目优化后续 ,手撸一个精简版VUE项目框架!
  • 【深度学习笔记】TensorFlow 基础
  • 面试题-springcloud中的负载均衡是如何实现的?
  • flink的ProcessWindowFunction函数的三种状态
  • day50-springboot+ajax分页
  • Win7 专业版Windows time w32time服务电脑重启后老是已停止