面试笔试遇到的一些题

本文探讨了指针变量的大小及其与计算机架构的关系,并详细分析了堆和栈的区别。此外,还介绍了如何在O(1)时间内删除单链表中的指定节点,以及几种检测数组中是否存在重复元素的方法。



sizeof 指针变量  大小为4个字节(以32位计算机为例),也是,计算机地址32位,指针存的是内存地址,自然也要32位。


堆和栈的区别:

1 栈由程序自动分配,堆是程序员申请的,必须指明大小;

2 程序结束,栈自动释放,而堆还需要free或者delete,手动释放;

2 分配栈很快,只要剩余空间足够分配,马上分配。申请堆时,计算机先遍历记录空闲内存的链表,找到内存分配,分配速度较慢;

3 栈获得的空间较小,堆获得的空间较大

4 堆中内容由程序员控制,比较灵活。

总结 栈便捷速度快,但自由度小,堆速度慢,但自由度高。


给定单链表头指针和指向要删除节点的指针,要求在O(1)内删除节点。

寻找前驱节点的做法是行不通的,时间复杂度太高,只有另找办法。

将第一个节点的data赋给要删除节点的data,然后删除第一个节点。

顺序有变化,但确实在O(1)内删除了。


检测数组N个元素是否有重复的。A[N]

方法1 循环嵌套,依次向后比,时间复杂度为O(N^2)

方法2 设置检验数组B[N],初始化为0,每读一个数,将相应的数组元素B[A[I]]置为1,当读到一个数A[J],且已经为B[A[J]]1时,即有重复。

方法3 读A[I],将A[A[i]]置为负数,当A[A[J]]也为负数时,有重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值