数组的知识点

news/2024/11/23 1:47:20/

数组

  • 1、概念
  • 2、二分查找 主要理解区间定义,对循环条件的影响
  • 3、移除元素
  • 有序数组的平方
  • 长度最小的子数组(滑动窗口)
  • 螺旋矩阵
  • 总结

1、概念

数组是存放在连续空间上的相同类型的数据集合。
特点:
1、数组下标都是从0开始的;
2、数组内存空间的地址是连续的。

C++,要注意vector和array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组。
C++中二位数组在地址空间是连续的。测试代码:

void test_arr() {int array[2][3] = {{0, 1, 2},{3, 4, 5}};cout << &array[0][0] << " " << &array[0][1] << " " << &array[0][2] << endl;cout << &array[1][0] << " " << &array[1][1] << " " << &array[1][2] << endl;
}int main() {test_arr();
}

2、二分查找 主要理解区间定义,对循环条件的影响

特点:前提是有序数组,而且没有无重复元素
题目:https://leetcode-cn.com/problems/binary-search/.
首位置 末尾位置,中间位置。
当中间位置的数字>目标数字 末尾位置挪移到中间位置
当中间位置的数字<目标数字 首位置挪移到中间位置
中间位置<0 中间位置>末尾位置 非法边界。
第一种写法 [left,right]
第二种写法[left,right)

int search(int* nums, int numsSize, int target){int left = 0;int right = numsSize - 1; while (left <= right){int middle = left + ((right - left) / 2); //防止溢出  防止什么溢出if (nums[middle] > target) {right = middle - 1;} else if (nums[middle] < target){left = middle + 1;}else{return middle;}}return -1;}

3、移除元素

题目:https://leetcode-cn.com/problems/remove-element/
第一种:暴力实现
第二种:双指针:一个快指针,一个慢指针
快指针是寻找这个新数组里所需要的元素(除去所需要删除目标元素的元素)
新数组的更新的位置就是slow。
在快指针获取到的值赋给慢指针就可以了。

int removeElement(int* nums, int numsSize, int val){int slowIndex = 0;for (int fastIndex = 0; fastIndex < numsSize; fastIndex++){if (val != nums[fastIndex]){nums[slowIndex++] = nums[fastIndex];}}return slowIndex;
};

类似题目:
26 删除排序数组中的重复项
283 移动零
844 比较含退格的字符串

有序数组的平方

题目:https://leetcode-cn.com/problems/squares-of-a-sorted-array/
第一种方法:暴力解法 每个数平方之后,排序即可
第二种方法:双指针法
考虑题目的特征:有序数组,那么数组的平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
此时可以考虑双指针法,i指向起始位置,j指向终止位置
定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。
怎么想到定义了一个新数组?因为数组的元素已经改变,不仅是位置的改变还有内容的改变。

#include <stdio.h>
#include <math.h>int main()
{int originalArr[5] = {-3,-2,4,5,6};int newArr[5] = {0};int i = 0;int j = 4;int k = 4;/*首先比较初始元素的平方和末尾元素的平方大小其次,将较大的一方放入新数组的末尾位置,并移动i或j的位置。循环结束的条件,i <= j*/while (i <= j){if (pow(originalArr[i],2) > pow(originalArr[j],2)){newArr[k] = pow(originalArr[i],2); i++;k--;}else{newArr[k] = pow(originalArr[j],2);j--;k--;}}for (int i = 0; i < 5; i++){printf("%d ",newArr[i]);}return 0;}

长度最小的子数组(滑动窗口)

螺旋矩阵

题目:https://leetcode-cn.com/problems/spiral-matrix-ii/

总结


http://www.ppmy.cn/news/51370.html

相关文章

QT笔记——QtPropertyBrowser的使用

上一节&#xff0c;我们将了如何去配置QtPropertyBrowser 本节&#xff0c;我们将说明 如何 去 使用QtPropertyBrowser 这个属性类的一些基本知识 简单的几种用法&#xff1a; 首先&#xff1a; 我们需要创建一个Widget 提升一个类 为 QtTreePropertyBrowser .h文件 QtVariant…

springboot,Flowable 流程实例的激活与挂起(二)

一.简介 接上一篇 springboot&#xff0c;Flowable 流程实例的激活与挂起&#xff08;一&#xff09; 二.流程实例的挂起与激活 1.流程实例的挂起 挂起一个流程实例的代码如下&#xff1a; Test void test08() {List<ProcessDefinition> list repositoryService.cr…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述&#xff1a; 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…

手写axios源码系列二:创建axios函数对象

文章目录 一、模块化目录介绍二、创建 axios 函数对象1、创建 axios.js 文件2、创建 defaults.js 文件3、创建 _Axios.js 文件4、总结 当前篇章正式进入手写 axios 源码系列&#xff0c;我们要真枪实弹的开始写代码了。 因为 axios 源码的代码量比较庞大&#xff0c;所以我们这…

mall-swarm微服务商城系统

mall-swarm是一套微服务商城系统&#xff0c;采用了 Spring Cloud 2021 & Alibaba、Spring Boot 2.7、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术&#xff0c;同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心…

Python数据结构与算法-欧几里算法(p95)

一、欧几里算法原理 欧几里得公式 欧几里得算法&#xff1a;gcd(a,b) gcd(b, a mod b) &#xff1b; mod是指模&#xff0c;即a/b取余数。 运算示例&#xff1a; gcd&#xff08;60,21&#xff09; gcd(21,18) gcd(18,3)gcd(3,0) 证明略 最大公约数-欧几里得求解 &#xff08…

一致性 Hash 算法 及Java TreeMap 实现

1、一致性 Hash 算法原理 一致性 Hash 算法通过构建环状的 Hash 空间替线性 Hash 空间的方法解决了这个问题&#xff0c;整个 Hash 空间被构建成一个首位相接的环。 其具体的构造过程为&#xff1a; 先构造一个长度为 2^32 的一致性 Hash 环计算每个缓存服务器的 Hash 值&…

2023移动云大会 | “六大”服务承诺 全力做优“心级服务”

4月25日&#xff0c;以“云擎未来 智信天下”为主题的2023移动云大会在苏州金鸡湖国际会议中心举办&#xff0c;众多政府领导、院士专家、知名企业客户与合作伙伴高层等数千名嘉宾齐聚一堂。 大会期间&#xff0c;移动云深入践行“为国建云”的使命&#xff0c;推出“六大”服…