【数据结构】--持续更

本文介绍了数据结构中的栈实现,特别是如何使用数组构建栈来优化内存消耗,以解决实际问题,如LeetCode的20.有效的括号问题。同时,探讨了计算机中的移位操作符,包括左移和右移,以及在二分查找中如何使用移位操作避免整数溢出,提高效率。强调在使用移位运算时要注意操作结果的括号处理。
摘要由CSDN通过智能技术生成

数据结构

栈Stack

Stack实现类, All Implemented Interfaces:
Serializable , Cloneable , Iterable , Collection , List , RandomAccess ,Stack实现了如上接口,在实际解决简单问题时,可以用数组构建栈结构(设置栈顶指针-标识),减少内存消耗
example:leetcode-20. 有效的括号
PS:switch case消耗内存,尽量使用if-else-if代替

移位操作符

计算机支持两种移位运算,假设操作数为x,移动的位数为k,则向左移位是 x << k,向右移位是 x >> k。左移位会对输入的操作数舍弃最高的k位,并在右端补k个0。而右移位运算却分为两种情况,分别是逻辑右移和算术右移(也叫无符号右移和符号右移),在逻辑右移中,会对操作数舍弃最低的k位,并在左端补k个0,在算术运算中,则对操作数舍弃最低的k位,并在左端补k个最高有效位的值。
在二分法中,int middle = (left + right)/2中,(left+right)可能会溢出int范围,用
middle = left + ((right-left)>>1)替代/2,效率更高,注意移位运算的结果要用括号括起来后再与其他值计算,否则会计算错误
int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值