【C进阶】指针和数组综合题

news2024/11/29 16:24:54

家人们欢迎来到小姜的世界,<<点此>>传送门 这里有详细的关于C/C++/Linux等的解析课程,家人们赶紧冲鸭!!!
客官,码字不易,来个三连支持一下吧!!!关注我不迷路!!!

指针和数组综合题

  • 指针和数组笔试题详解
    • (一)整型数组
    • (二)字符串型
    • (三)字符串指针
    • (四)二维数组
    • (五)归纳
  • 总结


在本文的开始,我将会以图文代码结合的方式,给大家介绍利用指针和数组的操作看字节大小和字符串长度,大家要抓紧上车,车速较快,把稳方向盘哦!

指针和数组笔试题详解

先在进行算字节和字符串长度时,大家需要了解以下三个概念,这三个概念是进行计算字节和字符串长度的钥匙:

1.sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名,数组名表示整个数组,取出的是整个数组的地址
3.除上述两个以外,所有的数组名都是数组首元素的地址

(一)整型数组

在代码下附有画图解释,大家可以比对着图再根据代码中的解释一一理解。

//1.sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节
//2.&数组名,数组名表示整个数组,取出的是整个数组的地址
//除上述两个以外,所有的数组名都是数组首元素的地址
#include<stdio.h>
int main() {
	int a[] = { 1,2,3,4 };
	//sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小
	printf("%d\n", sizeof(a));//4*4=16个字节

	//a+0是首元素地址,数组名不是单独放到sizeof内部,
	//此时a表示首元素地址,所以a+0是数组第一个元素的地址
	printf("%d\n", sizeof(a + 0));//4/8个字节

	//a是数组首元素地址,所以*a是数组首元素大小,单位是字节,整型类型是四个字节
	printf("%d\n", sizeof(*a));//4个字节

	//a没有单独放到sizeof内部,所以a表示首元素的地址,
	//+1表示跳过一个整型,所以a+1是第二个元素的地址
	printf("%d\n", sizeof(a + 1));//4/8个字节

	//a[1]就是数组第二个元素,计算的就是第二个元素的大小
	printf("%d\n", sizeof(a[1]));//4

	//取地址a是整个数组的地址,既然是地址,地址的大小就是4/8个字节
	//&a ---> 类型:int(*)[4] --- 数组指针
	printf("%d\n", sizeof(&a));//4/8个字节

	//取地址a以后再解引用,先取出的是整个数组的地址,
	//再解引用,取到的是整个数组的大小,
	//所以*&a==a,a就是数组名, sizeof(*&a)==sizeof(a)
	printf("%d\n", sizeof(*&a));//16个字节
	
	//&a是整个数组的地址,再加1是跳过整个数组指向数组后面的空间,
	//而cpu内部是还有空间的,是与a数组一样的数组,所以还是一个地址
	printf("%d\n", sizeof(&a + 1));//4/8个字节

	//a[0]就是首元素,再取个地址就是首元素地址,既然是个地址,
	//那就是4/8个字节
	printf("%d\n", sizeof(&a[0]));//4/8个字节

	//&a[0]+1是第二个元素的地址
	printf("%d\n", sizeof(&a[0] + 1));//4/8个字节

	//sizeof的返回类型就是size_t,而size_t又是unsigned int,
	//所以根本不需要理会后一个sizeof括号里的值,所以返回的就是size_t类型的字节
  //size_t在X86环境下定义为unsigned int,所以是4个字节
  //size_t在X64环境下定义为unsigned long,所以是8个字节
	printf("%d\n", sizeof(sizeof(a + 1)));//4/8个字节
	return 0;
}

第一个printf:
在这里插入图片描述

第二个printf:在这里插入图片描述

第三个printf:在这里插入图片描述

第四个printf:在这里插入图片描述
第五个printf:在这里插入图片描述

第六个printf:在这里插入图片描述

第七个printf:在这里插入图片描述

第八个printf:
在这里插入图片描述

第九个printf:在这里插入图片描述

第十个printf:在这里插入图片描述

第十一个printf:在这里插入图片描述

(二)字符串型

在代码下附有画图解释,大家可以比对着图再根据代码中的解释一一理解。

#include<stdio.h>
#include<string.h>
int main() {
	char arr[] = { 'a','b','c','d','e','f' };//a b c d e f 6个元素
	//arr单独放在sizeof内部,计算的是整个数组的大小,单位是字节
	printf("%d\n", sizeof(arr));//6个字节
	
	//arr因为没有单独放在sizeof内部,所以是首元素地址,
	//+0以后就还是首元素地址,是个地址那就是4/8个字节
	printf("%d\n", sizeof(arr + 0));//4/8个字节

	//arr没有单独放在sizeof内部,前面还有个*,所以此时的arr表示首元素地址
	//*arr是数组的首元素,计算的是数组的首元素大小
	printf("%d\n", sizeof(*arr));//1个字节

	//arr[1]就是数组的第二个元素
	printf("%d\n", sizeof(arr[1]));//1个字节

	//取出的是整个数组的地址,同样是一个地址,所以是4/8个字节
	printf("%d\n", sizeof(&arr));//4/8个字节

	//跳过整个数组指向数组后面的空间的地址,还是个地址
	printf("%d\n", sizeof(&arr + 1));//4/8个字节

	//&arr[0]+1是第二个元素的地址,也是个地址
	printf("%d\n", sizeof(&arr[0] + 1));//4/8个字节


	//arr是首元素地址,往后找不到'\0',因为像arr数组这样分装的数组末尾是没有'\0'的,
	//这是取决于电脑的,'\0'找不到,那就是随机值了
	printf("%d\n", strlen(arr));//随机值

	//是arr的地址,是从第一个arr往后找'\0',但一直找不到
	printf("%d\n", strlen(arr + 0));//随机值

	//*arr是首元素,所以给strlen函数传递的是'a'---ASCII码值为97,
	//97这块空间是没有被分配的,97这个地址不能进行访问,所以是非法访问
	printf("%d\n", strlen(*arr));//err

	//arr[1]是第二个元素,不是地址,所以传给strlen函数的是'b'---ASCII吗值为98
	//我们在前面已经学过strlen所传递的是指针,接收的也是指针,所以就是地址,
	//而现在传的是98这个非法的未开辟空间的地址,那肯定就是非法访问了
	printf("%d\n", strlen(arr[1]));//err

	//&arr虽然是数组的地址,但也是从数组起始位置开始的,计算的还是随机值
	printf("%d\n", strlen(&arr));//随机值

	//&arr+1是跳过整个数组的地址,更不知道什么时候找到'\0'了,也是随机值
	printf("%d\n", strlen(&arr + 1));//随机值

	//&arr[0]+1是从第二个元素的地址往后找'\0'求字符串长度,但往后找不到'\0'
	//也是个随机值
	printf("%d\n", strlen(&arr[0] + 1));//随机值


	//sizeof只在乎占用内存空间的大小,单位是字节,不关心内存中存的是什么
	//strlen是求字符串长度的,统计的是\0之前出现的字符个数,一定要找到'\0'才算结束,所以可能存在越界访问
	//sizeof是操作符,strlen是库函数
	//
	char arr1[] = "abcdef";//a b c d e f '\0' 7个元素
	//arr1数组名单独放在sizeof内部计算的是数组的总大小,单位是字节
	printf("%d\n", sizeof(arr1));//7个字节

	//arr1没有单独放在sizeof内部,所以是首元素地址,+0表示是首元素的地址
	printf("%d\n", sizeof(arr1 + 0));//4/8个字节

	//*arr1是数组首元素,大小为1字节
	printf("%d\n", sizeof(*arr1));//1个字节

	//arr1[1]是数组第二个元素,大小是1字节
	printf("%d\n", sizeof(arr1[1]));//1个字节

	//&arr1是整个数组的地址,数组的地址也是地址
	printf("%d\n", sizeof(&arr1));//4/8个字节

	//&arr1+1是跳过整个数组的地址,那也是个地址
	printf("%d\n", sizeof(&arr1 + 1));//4/8个字节

	//&arr1[0]+1是数组第二个元素的地址
	printf("%d\n", sizeof(&arr1[0] + 1));//4/8个字节


	//arr1数组名表示首元素地址,strlen是从首元素开始统计'\0'之前出现的字符个数
	printf("%d\n", strlen(arr1));//6

	//arr1+0是数组首元素地址,所以也是找'\0'之前的字符数
	printf("%d\n", strlen(arr1 + 0));//6

	//*arr是字符'a'---ASCII码值97,传给strlen是个非法的地址,所以会非法访问
	printf("%d\n", strlen(*arr1));//err

	//arr1[1]是字符'b'---ASCII码值98,传给strlen是个非法的地址,所以会非法访问
	printf("%d\n", strlen(arr1[1]));//err

	//&arr1是取到的整个数组的地址,但在strlen的角度来讲你既然传地址给我了,
	//我也知道首元素的地址了,从首元素地址往后找'\0'即可
	printf("%d\n", strlen(&arr1));//6

	//&arr1+1跳过整个数组,统计字符串的长度是随机值,因为找不到'\0'
	printf("%d\n", strlen(&arr1 + 1));//随机值

	//&arr[0]+1是从第二个字符往后统计字符串长度
	printf("%d\n", strlen(&arr1[0] + 1));//5
	return 0;
}

第一个printf:在这里插入图片描述

第二个printf:在这里插入图片描述

第三个printf:在这里插入图片描述

第四个printf:在这里插入图片描述

第五个printf:在这里插入图片描述

第六个printf:在这里插入图片描述

第七个printf:在这里插入图片描述

第八个printf:在这里插入图片描述

第九个printf:在这里插入图片描述

第十个printf:在这里插入图片描述

第十一个printf:在这里插入图片描述

第十二个printf:在这里插入图片描述

第十三个printf:
在这里插入图片描述

第十四个printf:在这里插入图片描述

第十五个printf:在这里插入图片描述

第十六个printf:在这里插入图片描述

第十七个printf:在这里插入图片描述

第十八个printf:在这里插入图片描述

第十九个printf:在这里插入图片描述

第二十个printf:在这里插入图片描述

第二十一个printf:在这里插入图片描述

第二十二个printf:在这里插入图片描述

第二十三个printf:在这里插入图片描述

第二十四个printf:在这里插入图片描述

第二十五个printf:在这里插入图片描述

第二十六个printf:在这里插入图片描述

第二十七个printf:
在这里插入图片描述

第二十八个printf:在这里插入图片描述

(三)字符串指针

在代码下附有画图解释,大家可以比对着图再根据代码中的解释一一理解。

#include<stdio.h>
#include<string.h>

int main() {
	const char* p = "abcdef";
	//p是指针变量,大小就是4/8个字节
	printf("%d\n", sizeof(p));//4/8个字节

	//p+1是b的地址,是地址就是4/8个字节
	printf("%d\n", sizeof(p + 1));//4/8个字节

	//*p就是字符a,因为p指针变量中存放的是a的地址,解引用就是字符a
	//那就是字符的大小
	printf("%d\n", sizeof(*p));//1个字节

	//p[0]==*(p+0)==*p --- 所以还是a字符的大小
	printf("%d\n", sizeof(p[0]));//1个字节

	//&p取出的是一级指针p的地址,那不就是二级指针嘛,大小为4/8个字节
	printf("%d\n", sizeof(&p));//4/8个字节

	//&p+1是在p指针上进行操作,是跳过p指针变量后的结果,但还是个指针,所以大小为4/8个字节
	printf("%d\n", sizeof(&p + 1));//4/8个字节

	//p[0]==*(p+0)==*p *p就是数组中a的值,所以p[0]就是a的值,而&p[0]就是a的地址
	//+1就是b的地址,是地址就是4/8个字节
	printf("%d\n", sizeof(&p[0] + 1));//4/8个字节


	//是求字符串的长度
	printf("%d\n", strlen(p));//6

	//p+1是b的地址,求字符串长度是从b开始往后找'\0'
	printf("%d\n", strlen(p + 1));//5

	//*p -- 字符a  这地址给的是97,是非法地址
	printf("%d\n", strlen(*p));//err

	//p[0] == *(p+0) == *p 地址给的还是97,是个非法地址
	printf("%d\n", strlen(p[0]));//err

	//&p拿到的是p这个指针变量的起始地址,从这里开始求字符串长度完全是随机值
	printf("%d\n", strlen(&p));//随机值

	//&p+1是跳过p变量的地址,从这里开始求字符串长度也是随机值
	printf("%d\n", strlen(&p + 1));//随机值

	//&p[0]+1取出的是b的地址,从b的地址往后数字符串长度为5
	printf("%d\n", strlen(&p[0] + 1));//5
	return 0;
}

这个是char* p="abcdef“的p指针变量的解析:
在这里插入图片描述

第一个printf:在这里插入图片描述

第二个printf:在这里插入图片描述

第三个printf:在这里插入图片描述

第四个printf:在这里插入图片描述

第五个和第六个printf:在这里插入图片描述

第七个printf:在这里插入图片描述

第八个printf:在这里插入图片描述

第九个printf:在这里插入图片描述

第十个和第十一个printf:在这里插入图片描述

第十二个和第十三个print:
在这里插入图片描述

第十四个printf:在这里插入图片描述

(四)二维数组

在代码下附有画图解释,大家可以比对着图再根据代码中的解释一一理解。

#include<stdio.h>
int main() {
	int a[3][4] = { 0 };//3行4列的整型数组
	//a为数组名,表示整个数组的大小
	printf("%d\n", sizeof(a));//48个字节=3*4*4

	//就是第一个整形元素的字节数
	printf("%d\n", sizeof(a[0][0]));//4个字节

	//a[0]是第一行的数组名,数组名单独放在sizeof内部,计算的是数组的大小
	printf("%d\n", sizeof(a[0]));//16个字节=4*4

	//a[0]作为第一行的数组名,没有单独放在sizeof内部,没有取地址,表示的是数组首元素地址,就是a[0][0]的地址
	//a[0]+1就是第一行第二个元素的地址,是地址就是4/8个字节
	printf("%d\n", sizeof(a[0] + 1));//4/8个字节

	//第一行第二个元素的地址进行解引用,求的是第一行第二个元素的大小
	printf("%d\n", sizeof(*(a[0] + 1)));//4个字节

	//a是二维数组的数组名,数组名表示首行的地址,首行地址加1就是整个第二行的地址
	//第二行的地址也是地址,是地址就是4/8个地址
	//a+1的类型是:int(*)[4] -- 数组指针
	printf("%d\n", sizeof(a + 1));//4/8个地址

	//a+1是第二行的地址,*(a+1)表示的是整个第二行,*(a+1) == a[1],整个第二行的大小
	printf("%d\n", sizeof(*(a + 1)));//16个字节
	
	//&a[0]拿到的是第一行的地址,再加1则拿到的是第二行的地址,是地址就是4/8个字节
	printf("%d\n", sizeof(&a[0] + 1));//4/8个字节

	//同理,对第二行的地址解引用,得到的就是第二行的数组名,计算得到的就是第二行的大小
	printf("%d\n", sizeof(*(&a[0] + 1)));//16个字节=4*4

	//a是数组名,没有单独放到sizeof里,所以a就是首行的地址,所以*a就是数组第一行的所有元素
	//计算的就是第一行的大小,*a --- *(a+0) --- a[0]
	printf("%d\n", sizeof(*a));//16个字节=4*4

	//虽然越界了,如果数组存在第四行,a[3]就是第四行的数组名,所以计算的是第四行的大小,
	//数组名单独放在sizeof内部,计算的是第四行的大小,我们只是根据内部的类型进行计算的
	printf("%d\n", sizeof(a[3]));//16个字节=4*4
	return 0;
}

第一个printf:在这里插入图片描述

第二个printf:在这里插入图片描述

第三个printf:
在这里插入图片描述在这里插入图片描述

第四个printf:在这里插入图片描述

第五个printf:在这里插入图片描述

第六个printf:在这里插入图片描述

第七个printf:在这里插入图片描述

第八个peintf:在这里插入图片描述

第九个printf:在这里插入图片描述

第十个printf:在这里插入图片描述

第十一个print:在这里插入图片描述

(五)归纳

数组名的意义:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。

总结

这个指针和数组的综合题简直是干货满满,把所有的strlen和sizeof类型整理了一下,比较着来看更加能够理解这其中的深意,尤其是将代码和图形搭配着来讲解,是十分清晰易懂的,当大家觉得理解起来有困难,一定要画个图更好理解!!!


客官,码字不易,来个三连支持一下吧!!!

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

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

相关文章

设计模式-工厂模式(Java)

工厂方法模式 工厂方法模式&#xff1a;Factory Method 事物是发展的&#xff0c;随着事物的不断发展&#xff0c;原有的对象会随着发展不断变化&#xff0c;或增或减。 工厂方法模式提供的一种封装机制&#xff0c;隔离出了那些易变动的对象。这个时候需求的变动不再影响之前…

Mybatis-Plus中的条件查询-DQL编程

条件构造器 | MyBatis-Plus 当需要进行一些复杂的条件查询时&#xff0c;则需使用wrapper&#xff0c;来编辑这些条件 1、条件查询 ①allEq() 即是where后面的等于"",该方法的后的所有参数都会被以"and"的形式进行连接 QueryWrapper qw1 new QueryWra…

Go语言设计与实现 -- 栈空间管理

寄存器 图片来自于面向信仰编程 Go 语言的汇编代码包含 BP 和 SP 两个栈寄存器&#xff0c;它们分别存储了栈的基址指针和栈顶的地址&#xff0c;栈内存与函数调用的关系非常紧密&#xff0c;我们在函数调用一节中曾经介绍过栈区&#xff0c;BP 和 SP 之间的内存就是当前函数的…

数智化转型进入“精装时代”,容联云助力千行百业加速上云用数赋智

随着产业数字化向前推进&#xff0c;企业引入数字技术的需求和热情十分充足&#xff0c;但要把技术下沉到市场中&#xff0c;还存在一个关键的矛盾&#xff1a;交付能力。千行百业&#xff0c;尤其是传统实体经济从业者&#xff0c;对数智化所需要的5G、IOT、AI、大数据、云计算…

canvas入门教学(5)运动小球屏保特效与下雪特效渲染

本节我们来学习两个例子,第一个例子是如下图这样的,全屏各色各样的小球随机运动,碰撞到屏幕边缘再反弹回来的特效,我们一步一步带着大家来学习这个canvas应用。 首先呢,基于上一个教程的例子,我们需要基础的构建圆, 上节教程在这里 并且呢我们要重复的多次的构建半径…

OVN实验----L2互通

概述 尽量少贴概念&#xff0c;只同步一些必要的名词。 central: 可以看做中心节点&#xff0c;central节点组件包括OVN/CMS plugin、OVN Northbound DB、ovn-northd、OVN Southbound DB。 hypervisor: 可以看做工作节点&#xff0c;hypervisor节点组件包括ovn-controller、ov…

Target 塔吉特的4种商品编码

Target塔吉特共有4种商品编码&#xff1a;TCIN、DPCI、UPC、SKU&#xff0c;其中DPCI、UPC和TCIN在Target系统中是唯一的ID。在target.com中查看商品时&#xff0c;在任一个商品中下拉进入到商品详情页&#xff08;Item/Detail/Specifications&#xff09;中都可以看到该商品的…

13_5、Java的IO流之转换流的使用

一、转换流涉及到的类&#xff1a;都是字符流InputStreamReader&#xff1a;将输入的字节流转换为输入的字符流。解码&#xff1a;字节、字节数组 ————>字符串、字符数组OutputStreamWrite&#xff1a;将输出的字符流转换为输出的字节流。编码&#xff1a;字符串、字符数…

Linux 网络探测和安全审核工具 nmap 应用实践

对于 nmap&#xff0c;相信很多安全运维人员并不陌生&#xff0c;它曾经在电影《黑客帝国》中出现过&#xff0c; 是黑客和网络安全人员经常用到的工具&#xff0c;本文重点介绍下此工具的实现原理和使用技巧。 nmap 和 Zenmap 简介 nmap 是一款开源免费的网络发现工具&#…

2023兔年大吉HTML,兔兔动态代码「兔了个兔」

文章目录一.2023兔年大吉HTML&#xff0c;兔兔动态代码「兔了个兔」1.1 资源获取和效果预览二.代码讲解&#xff08;主要代码&#xff09;1.1 背景加圆圈圈1.2.兔兔和提示字1.3 JavaScript控制动态一.2023兔年大吉HTML&#xff0c;兔兔动态代码「兔了个兔」 1.1 资源获取和效果…

如何在游戏中实现飘花和落叶效果

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。今天这篇文章分享一下如何在游戏中实现飘花和落叶的效果&#xff0c;在游戏背景中加入它们&…

FPGA:数字电路简介

文章目录数字电路的历史电子管时代晶体管时代半导体集成电路IC 时代IC的发展阶段EDA (Electronics Design Automation) 技术数字集成电路的分类数字集成电路的集成度分类从器件导电类型不同从器件类型不同数字电路的历史 数字电路是数字计算机和自动控制系统的基础&#xff0c…

[JavaEE初阶] 线程安全问题之内存可见性问题----volatile

读书要趁黑发早,白首不悔少当时 文章目录1. 什么是内存可见性问题2. 避免内存可见性问题-----volatile(易变的)3. 需要注意的点总结1. 什么是内存可见性问题 在线程A在读一个变量的时候,另一个线程B在修改这个变量,所以,线程A读到的值不是修改之后的,是一个未更新的值,读到的值…

先行“蜀道”, 四川农信核心系统分布式转型

作者&#xff1a;四川省农村信用社联合社 张朝辉 桂俊鸿 来源:《金融电子化》 随着四川省联社党委提出“合规银行、智慧银行、主力军银行”三大银行战略。作为四川省业务规模最大的银行业金融机构、全国农信系统“排头兵”的四川农信积极响应&#xff0c;率先于 2018 年 9 月完…

mysql磁盘io

1、磁盘的一些概念 1.1、盘片、片面 和 磁头 硬盘中一般会有多个盘片组成&#xff0c;每个盘片包含两个面&#xff0c;每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制&#xff0c;盘片数量都受到限制&#xff0c;一般都在5片以内。盘片的编号自下向上从…

Viper渗透框架

文章目录Viper 简介Viper 安装脚本安装手动安装切换到 root 用户执行命令Kali 安装 docker (我已经安装过了&#xff0c;不做演示&#xff0c;命令依次执行即可)安装 docker-compose设置安装目录生成安装目录&#xff0c;并进入安装目录生成 docker-compose.yml设置登录密码写入…

【C++常用算法】STL基础语法学习 | 拷贝算法替换算法

目录 ●copy ●replace ●replace_if ●swap ●copy 1.功能描述&#xff1a; 将容器内指定范围的元素拷贝到另一容器中 2.查看copy定义下底层代码的函数原型&#xff1a; 3.向deque容器中插入10~50五个数&#xff0c;将这五个数拷贝到另一个指定容器中并输出。 #include&…

【生产问题】前端接口请求报blocked:mixed-content

事故现象 客户端反馈系统无法使用。打开页面很多内容无法显示。 f12 显示很多请求都失败了。 定位问题 客户咨询 客户反馈昨天 在nginx 上面配置了https证书。导致了http 请求无法访问。 客户已经在nginx上面配置了https。即 网页端的请求会重定向到https请求上面。那为啥…

无需离开 Visual Studio 即可编写 Markdown

当您想要格式化代码但又不想牺牲易读性时&#xff0c;Markdown 是一个很好的解决方案。GitHub 将其用于自述文件&#xff0c;我们将其用作 Visual Studio 文档的标准。之前收到了不少来自开发者的反馈&#xff0c;大家希望在 Visual Studio 中使用 Markdown 编辑器。在最近的 V…

87、【栈与队列】leetcode ——347. 前 K 个高频元素:优先队列(小根堆)+Hash表(C++版本)

题目描述 原题链接&#xff1a;347. 前 K 个高频元素 一、优先队列&#xff08;小根堆&#xff09;Hash表 使用Hash表存nums中各元素出现次数&#xff0c;维护一个优先级队列&#xff0c;在里面存k个数&#xff0c;采用小根堆方式&#xff0c;从小到大进行排列。当存入的数多…