数据结构之:数组

news2025/1/10 10:53:13
数组初体验之数组中重复的数字
数组 : 有限个 相同类型的变量 组成的有序集合
int[] arr;
int arr[];
// 静态初始化
String[] strArr = {" 和平精英 "," 王者荣耀 "," 开心消消乐 "," 欢乐斗地主 "};
// 动态初始化
String[] strArr1 = new String[4];

 

数组中重复的数字
https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/

 数组中重复的数字

找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0 n-1 的范围内。数组中某些数字是重复的,
但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数
字。
示例 1
输入:
[2, 3, 1, 0, 2, 5, 3]
输出: 2 3
解法
1) 集合的解法 set
使用集合存储已遍历过的数据,新数据遍历时,判断是否在集合中存在,如果存在即为重复的
   public static int findRepeatNumber(int[] nums) {
        Set<Integer> set = new HashSet<>();
// 遍历数组 iter快捷键
        for (int num : nums) {
            if (set.contains(num)) {
                System.out.println("发现重复元素" + num);
                return num;
            }
            System.out.println("添加元素" + num);
            set.add(num);
        }
        return -1;
    }
2) 先排序后查找
排序后重复元素相邻
[2, 3, 1, 0, 2, 5, 3]
[0, 1, 2, 2, 3, 3, 5]
   public static int findRepeatNumber1(int[] nums) {
// 操作数组的工具类 进行排序
        System.out.println(Arrays.toString(nums));
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
// itar快捷键 通过判断相邻元素是否相等 返回是否重复
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1]) {
                return nums[i];
            }
        }
        return -1;
    }
3) 临时数组
因为长度为 n 的数组 nums 里的所有数字都在 0 n-1
所以 临时数组中的索引 对应所有可能出现的数字
遍历时 将出现数字 对应到临时数组的索引位置 更改元素值 0 - 1
当临时数组的元素 不为 0 说明此索引位置 已经出现过元素了
[2, 3, 1, 0, 2, 5, 3]
[0, 0, 0, 0, 0, 0, 0]
0 1 2 3 4 5 6
[0, 0, 1, 0, 0, 0, 0]
[0, 0, 1, 1, 0, 0, 0]
[0, 1, 1, 1, 0, 0, 0]
[1, 1, 1, 1, 0, 0, 0]
    public static int findRepeatNumber2(int[] nums) {
        System.out.println(Arrays.toString(nums));
// 临时数组 所有元素默认是0
        int[] tmp = new int[nums.length];
        System.out.println(Arrays.toString(tmp));
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
// 如果已经复制 代表重复出现
            if (tmp[num] != 0) {
                return num;
            }
// 找到临时数组的索引位置 赋值为1
            tmp[num] = 1;
            System.out.println(Arrays.toString(tmp));
        }
        return -1;
    }
4) 交换位置查找
[2, 3, 1, 0, 2, 5, 3]
0 1 2 3 4 5 6
[0, 1, 2, 3, 2, 5, 3]
0 1 2 3 4 5 6
[2, 3, 1, 0, 2, 5, 3]
遍历数组的过程中
希望当前位置 和 出现元素正好匹配上
先判断 是否匹配 如果不匹配 进行交换 并且看需要交换的位置 是否存在期望元素
如果可以交换 交换之后 继续遍历当前位置 如果不可交换 即为重复元素
0 1 2 3 4 5 6
遍历 2 交换 2 1 [1, 3, 2, 0, 2, 5, 3]
遍历 1 交换 1 3 [3, 1, 2, 0, 2, 5, 3]
遍历 3 交换 3 0 [0, 1, 2, 3, 2, 5, 3]
遍历 0 不交换
遍历 1 不交换
遍历 2 不交换
遍历 3 不交换
遍历 2 已经出现期望元素 是重复元素
    public static int findRepeatNumber3(int[] nums) {
        System.out.println(Arrays.toString(nums));
// [2, 3, 1, 0, 2, 5, 3]
        for (int i = 0; i < nums.length; i++) {
// 如果索引正好等于元素本身 是期望的结果 跳过
            if (nums[i] == i) continue;
// i = 0
            int num = nums[i]; // 2
// 如果要交换的位置 已经有期望值 说明重复
            if (nums[num] == num) {
                System.out.println("当前索引为" + num + "的位置 已经有" + num +
                        "值,重复了");
                return num;
            }
            int tmp = nums[num]; // 1
            nums[num] = num;
            nums[i] = tmp;
// [1, 3, 2, 0, 2, 5, 3]
// 交换仍需遍历当前位置的值 所以抵消i++
            i--;
            System.out.println(Arrays.toString(nums));
        }
        return -1;
    }
数组初体验之数组中消失的数字
数组中消失的数字
https://leetcode-cn.com/problems/fifind-all-numbers-disappeared-in-an-array/
找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一
些只出现一次。
找到所有在 [1, n] 范围之间没有出现在数组中的数字。
您能在不使用额外空间且时间复杂度为 O(n) 的情况下完成这个任务吗 ? 你可以假定返回的数组不算
在额外空间内。
示例 :
输入 :
[4,3,2,7,8,2,3,1]
输出 :
[5,6]
解法:
1 )使用容器存储已出现的数字
[4,3,2,7,8,2,3,1]
额外容器 [4,3,2,7,8,1]
1-8( 数组的长度 ) [5,6]
set list map
不重复无序 适用 set
可能重复且有序 适用 list
映射关系 < 元素,出现的次数 > map
    public static List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> result = new ArrayList<>();
// 使用set 存储已出现的数字
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
// 从1-n开始遍历
        for (int i = 1; i <= nums.length; i++) {
            if (!set.contains(i)) {
                result.add(i);
            }
        }
        return result;
    }
2 )不使用额外的空间?
[1,2,4,5,1] 1-5 [3]
[1,2,4,5,1]
0 1 2 3 4
1 2 3 4 5
能不能利用 索引 来记录已出现的数字?
元素 索引 i i 位的值进行变化 说明
1 0 [-1,2,4,5,1] 1 变为 -1
2 1 [-1,-2,4,5,1] 2 变为 -2
4 3 [-1,-2,4,-5,1] 5 变为 -5
5 4 [-1,-2,4,-5,-1] 倒数的 1 变为 -1
1 0 [-1,-2,4,-5,-1]
剩余还是正数的元素 索引对应的值从未出现过
    public static List<Integer> findDisappearedNumbers1(int[] nums) {
        List<Integer> result = new ArrayList<>();
// 元素对应的索引 将指定位置元素 置为负数
        for (int i = 0; i < nums.length; i++) {
            int num = Math.abs(nums[i]);
            int index = num - 1;
// 将对应索引位置的值置为负数 前提是这个数是整数
            if (nums[index] > 0) {
                nums[index] = -nums[index];
                System.out.println("索引" + index + " " + Arrays.toString(nums));
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > 0) {
                result.add(i + 1);
                System.out.println(nums[i] + "元素仍为正数,找到" + (i + 1));
            }
        }
        return result;
    }
数组初体验之多数元素
多数元素
https://leetcode-cn.com/problems/majority-element/
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 n/2
元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入 : [3,2,3]
输出 : 3
示例 2:
输入 : [2,2,1,1,1,2,2]
输出 : 2
解法分析:
1 )使用 map 记录 < 元素,出现次数 >
如果次数超过 n/2 即为要查找的元素
数组 [3,2,3]
map <3,1> <2,1> <3,2>
判断条件 2 > 3/2 = 1
    public static int majorityElement(int[] nums) {
// map 记录元素出现个数
        Map<Integer, Integer> map = new HashMap<>();
// 统计 多数元素 满足结果
        int halfLen = nums.length / 2;
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
// 元素次数 初始化是1
            int count = 1;
            if (map.containsKey(num)) {
                count = map.get(num);
                count++;
            }
// 判断是否是多数元素
            if (count > halfLen) {
                return num;
            }
            System.out.println(num + "元素,存储次数为" + count);
            map.put(num, count);
        }
        return -1;
    }
2 )排序后取中间元素
[3,2,3]
[2,3,3]
[2,2,1,1,1,2,2]
[1,1,1,2,2,2,2]
[1,1,1,2]
[1,2,2,2]
    public static int majorityElement1(int[] nums) {
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
        int halfLen = nums.length / 2;
        return nums[halfLen];
    }
3 )投票算法
将元素当做候选人,如果新元素和候选人相同,次数 +1, 不同次数 -1( 代表抵消 )
如果次数 =0 ,候选人更新
[2,2,1,1,1,2,2]
元素 次数 候选人
2 1 2
2 2
1 1
1 0
1 1 1
2 0
2 1 2
本质上 多数元素出现的次数 一定大于其他所有元素出现次数的总和 所以候选人的次数经过抵消后
最终剩余的一定是 多数元素
    public static int majorityElement2(int[] nums) {
// 候选人
        int candidate = -1;
// 出现次数
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
// 如果出现次数为0 重置候选人
            if (count == 0) {
                candidate = nums[i];
            }
// 根据新元素是否等于候选人 进行次数的加减操作
            if (candidate == nums[i]) {
                count++;
            } else {
                count--;
            }
            System.out.println("元素" + nums[i] + ",次数" + count
                    + ",候选人" + candidate);
        }
        return candidate;
    }
稀疏数组的定义和转化
稀疏数组
二维数组 : 每个元素都是一维数组
int[][] arr = new int[10][10]
0 1 2 3 4 5 6 7 8 9
0 [0,0,0,0,0,0,0,0,0,0]
1 [0,0,1,0,0,0,0,0,0,0]
2 [0,0,2,0,0,0,0,0,0,0]
3 [0,2,0,0,0,0,0,0,0,0]
4 [0,0,0,0,0,0,0,0,0,0]
5 [0,0,0,0,0,0,0,0,0,0]
6 [0,0,0,0,0,0,0,0,0,0]
7 [0,0,0,0,0,0,0,0,0,0]
8 [0,0,0,0,0,0,0,0,0,0]
9 [0,0,0,0,0,0,0,0,0,0]
稀疏数组
保存原始的行数和列数
保存非零元素的位置
元素值
10 10 3
1 2 1
3 1 2
2 2 2
(n+1)*3 列的数组 压缩, n 代表非零元素的个数
第一行 存储总行数 总列数 和 非零元素的个数
接下来每一行 存储 元素的行数 列数 和 自身元素值
    // 把普通数组 转化为 稀疏数组
    public static int[][] toSparse(int[][] arr) {
// (n+1)*3列的数组 初始化
// 需要先求 非零元素的个数
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] != 0) {
                    count++;
                }
            }
        }
        int[][] result = new int[count + 1][3];
        result[0][0] = arr.length;
        result[0][1] = arr[0].length;
        result[0][2] = count;
// 遍历数组 找到所有非零元素 存储到结果中
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i][j] != 0) {
                    index++;
                    result[index][0] = i;
                    result[index][1] = j;
                    result[index][2] = arr[i][j];
                }
            }
        }
        return result;
    }
经典算法思想之双指针

双指针
索引 i 是一个指针 一个引用
for(int i=0;i<arr.length;i++){
int num = arr[i];
}
两个指针 —— 双指针
如果两个指针是相反方向,叫对撞指针
如果两个指针是相同方向,通过速度的不同,或者起点的不同,达到处理的目的,叫快慢指针
删除排序数组中的重复项
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后
数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1:
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4
你不需要考虑数组中超出新长度后面的元素
分析:
需要额外指针 记录新出现的不同元素 需要覆盖的位置

    public static int removeDuplicates(int[] nums) {
        if (nums.length == 0) return 0;
// 记录要比较的元素位置
        int index = 0;
        for (int i = 1; i < nums.length; i++) {
// 如果不同 进行覆盖
            if (nums[i] != nums[index]) {
                index++;
                nums[index] = nums[i];
                System.out.println("覆盖第" + index + "位置的元素为" + nums[i]);
            }
        }
// 新数组的长度 = 最大索引+1
        return index + 1;
    }
双指针应用之移除元素
移除元素
https://leetcode-cn.com/problems/remove-element/

给一个数组 nums 和一个值 val ,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数
组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
给定 nums = [3,2,2,3], val = 3,
函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2
你不需要考虑数组中超出新长度后面的元素。
示例 2:
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4
注意这五个元素可为任意顺序。
你不需要考虑数组中超出新长度后面的元素。
分析:
解法 1 ) 双指针覆盖
[3,2,1,3] val = 3
使用额外指针 记录要覆盖的索引位置
索引
3 0 [3,2,1,3]
2 1 [2,2,1,3]
1 2 [2,1,1,3]
3
[0,1,2,2,3,0,4,2] val = 2
索引初始值是 0
元素 索引 数组
0 1 [0,1,2,2,3,0,4,2]
1 2 [0,1,2,2,3,0,4,2]
2
2
3 3 [0,1,3,2,3,0,4,2] 0 4 [0,1,3,0,3,0,4,2]
4 5 [0,1,3,0,4,0,4,2]
2
    public static int removeElement(int[] nums, int val) {
// 记录要覆盖的索引位置
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
// 覆盖的是当前位置
                nums[index] = nums[i];
                System.out.println("将" + nums[i] + "覆盖到" + index + "位置上");
                index++;
            }
        }
// 新数组的长度大小
        return index;
    }
解法 2 )直接替换
[0,1,2,2,3,0,4,2] val=2
[0,1,2,2,3,0,4|,2] len=7
[0,1,4,2,3,0|,2,2] len=6
[0,1,4,0,3|,2,2,2] len=5
index=0 len=8
判断当前值 是否需要被删除
如果需要 进行替换 替换最后一个位置的元素
nums[index] = nums[len-1]
len--;
index--; // 替换回来的值 仍要进行判断
index++
index >= len 循环结束
    public static int removeElement1(int[] nums, int val) {
        int index = 0;
// 记录有效元素的个数
        int len = nums.length;
        while (true) {
            if (index >= len) return len;
            if (nums[index] == val) {
                nums[index] = nums[len - 1];
                nums[len - 1] = val;
                System.out.println("替换位置" + index + "和" + (len - 1) + "的元素");
                        System.out.println(Arrays.toString(nums));
                len--;
                index--;
            }
            index++;
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自学 TypeScript 第三天 使用webpack打包 TS 代码

安装&#xff1a; 首先第一步&#xff0c;我们要初始化我们项目&#xff0c;在目录下输入 npm init 接下来&#xff0c;我们的安装几个工具 npm i -D webpack webpack-cli typescript ts-loader -D 意思是 开发依赖&#xff0c;也就是我们现在所安装的依赖都是开发依赖&am…

知乎 日报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言评论界面首页cell的小标题的文字显示下拉刷新前言 这周完成了评论内容&#xff0c;改了一些小bug。收藏界面正在加油&#xff0c;FMDB库目前不是很理解 评论界面…

【C++初阶】三、类和对象(中)

在上一篇类和对象中&#xff0c;我们初步了解了类和对象的基本概念&#xff0c;知道了什么是类&#xff0c;接下来一起看看类和对象的具体细节和实现吧。&#xff08;以日期类举例&#xff09; 文章目录类和对象【中】1.类的6个默认成员函数2. 构造函数2.1 构造函数定义2.2 构造…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.16 SpringBoot 整合 ES 客户端操作

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.16 SpringBoot 整合 ES 客户端操作4.16.1 环境准备…

[附源码]java毕业设计停车场收费管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

DP入门(一)

前言&#xff1a;由于作者经常卡力扣周赛最后一题的dp&#xff0c;因此决定痛改前非&#xff0c;从头做人&#xff0c;争取下次能做出最后一道dp ak周赛&#xff01;呜呜呜加油~~ 因此 这个系列的文章不会教 dp &#xff0c;只会讲刷题思路&#xff0c;目前的计划是先更 lc 的题…

[Spring Cloud] RestTemplate跨进程调用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

【k8s】5、资源管理命令-声明式

文章目录一、 yaml和json介绍1、yuml语言介绍2、k8s支持的文件格式3、yaml和json的主要区别二、声明式对象管理1、命令式对象配置2、声明式对象配置3、声明式对象管理命令介绍三、编写资源配置清单1、 编写yaml文件2、 启动并查看资源3、创建service服务对外提供访问测试4、创建…

MySQL介绍

MySQL数据库最初是由瑞典MySQL AB公司开发&#xff0c;2008年1月16号被Sun公司收购。2009年&#xff0c;SUN又被Oracle收购。MySQL是目前IT行业最流行的开放源代码的数据库管理系统&#xff0c;同时它也是一个支持多线程高并发多用户的关系型数据库管理系统。MySQL之所以受到业…

基于51单片机的舞蹈机器人四路步进电机控制仿真

资料编号&#xff1a;091 下面是相关功能视频演示&#xff1a; 91-基于51单片机的舞蹈机器人四路步进电机控制仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a;通过51单片机控制4个步进电机旋转&#xff0c;模拟出机器人的四肢动作&#xff0c;全套资料齐全…

ES6 入门教程 17 Promise 对象 17.2 基本用法

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程17 Promise 对象17.2 基本用法17 Promise 对象 17.2 基本用法 ES6 规定&#xff0c;Promise对象是一个构造函数&#xff0…

【Java高级】一篇文章带你搞懂线程

目录 | 线程概述 | 线程创建 方式一&#xff1a;继承 Thread 类 方式二&#xff1a;实现 Runnable 接口 一些小细节 方式三&#xff1a;实现 Callable 接口&#xff08;JDK1.8&#xff09; | 线程生命周期 生命周期概述 [获取线程信息] 方法 set/getName current [运…

ArcGIS绘制北半球俯视投影地图

做全球碳水循环,植被变化,极端气候相关研究的同学都知道。北半球是核心,因为北半球的核心区域(东亚湿润区,中亚干旱半干旱,青藏高原,阿拉伯半岛,非洲北部沙漠以及美国西部等等核心区): 对于北半球的展示一般采用下面的图: 那么该如何做呢? 熟悉地图学的同学都知道…

Dubbo-聊聊Dubbo协议

前言 Dubbo源码阅读分享系列文章&#xff0c;欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrapper 注册中心 Dubbo-聊聊注册中心的设计 Dubbo-时间轮设计 通信 Dubbo-聊聊通信模块设计 什么是协议 在网络交…

【FreeRTOS】FreeRTOS删除任务vTaskDelete()

使用说明&#xff1a; 任务中。小时 &#xff08;任务句柄_t xTask&#xff09;; INCLUDE_vTaskDelete必须定义为1&#xff0c;才能使用此函数。有关更多信息&#xff0c;请参见RTOS配置文档。 从RTOS内核管理中删除任务。正在删除的任务将从所有就绪、阻止、暂停和事件列表中删…

CEAC 之《计算机应用助理工程师》1

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;微微的猪食小窝 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 微微的猪食小窝 原创 收录于专栏 【CEAC证书】 1组合框有3种不同的类型&#xff0c;这3种类型是下拉式组合框、简单组合框、下拉式列表框&…

12. PyQt5实现多页面切换之QTabBar

PyQt5 QTabBar 类 QTabBar 类直接继承自 QWidget。该类提供了一个选项卡栏&#xff0c;该类仅提供了一个选项卡&#xff0c; 并没有为每个选项卡提供相应的页面&#xff0c;因此要使选项卡栏实际可用&#xff0c;需要自行为每个选项 卡设置需要显示的页面&#xff0c;可以通过 …

【k8s】6、pod详解

文章目录一、pod介绍1、pod的基础概念2、pod定义&#xff08;资源清单&#xff09;二、Pod中的容器配置1、基本配置2、镜像拉取&#xff08;imagePullPolicy&#xff09;3、启动命令&#xff08;command&#xff09;4、环境变量&#xff08;env&#xff09;5、端口设置&#xf…

应急响应-计划任务排查

计划任务排查 由于很多计算机都会自动加载“计划任务”&#xff0c;“计划任务”也是恶意病毒实现持久化驻留的一种常用手段&#xff0c;因此在应急响应事件排查时需要进行排查。通俗的讲会定期执行某些操作。 Windows计划任务排查 任务计划是Windows系统的一个预置实现某些…

【数据结构】二叉树的顺序存储结构 —— 堆

文章目录前言二叉树的顺序存储堆的概念和结构堆的实现结构的定义接口总览初始化销毁插入向上调整删除向下调整取堆顶数据计算堆大小判空打印堆完整代码Heap.hHeap.ctest.c结语前言 今天&#xff0c;我们开始二叉树的学习。本篇博客的内容为 介绍二叉树的顺序存储 和 堆的实现。…