java数据结构之数组

本文深入探讨了Java中的数组,强调数组内存的连续性及其对增删操作的影响。介绍了二分查找法,指出其适用于有序数组,并讨论了移除元素的不同方法。同时,详细讲解了双指针在解决滑动窗口问题中的应用,以及数组在实际编程中的注意事项,如数组下标从0开始,不能直接删除元素等。
摘要由CSDN通过智能技术生成

数组:

  • 数组下标都是从0开始的
  • 数组内存空间的地址是连续的
    • 正是因为数组内存空间的地址是连续的所以我们在删除或者增添元素的时候,就难免要移动其它元素的地址。(一维数组的增删操作时间复杂度为O(n),所以数组不适合做频繁的增删操作)(二维数组不是连续的m*n的地址空间)

二分查找法

二分查找发使用的基础就是数组必须是有序的 。 并且当存在重复元素的时候使用二分查找法返回的元素下标可能不是唯一的。

二分法,一看就会,一写就废。仔细体会。
当什么时候写 while(left<=right)  什么时候写 while(lefe<right)  
什么时候是开区间[left,right]  什么时候写[left,right)


二分法的第一种写法

Class Solution{
   
public int searchInsert(int[] nums,int target){
   
	int n = nums.length;
	int left = 0;
	int right=n-1;  此时nums[right]代表 数组中的最后一个元素元素,因此应定义为[left,rignt] 闭区间
	while(left<=right){
    当target存在与闭区间[left,rignt]中时 需写上 <= 号这样不会把最后一个元素丢掉
		int meddle = left+(left-right)/2; 为什么写 left+(left-right)/2  而不写 (left + right)/2 ?
		if(target>nums[meddle]){
         因为 加法 当左右边界较大时容易产生溢出,而减法不会出现这种情况
			left=meddle+1;
		}else if(targrt<nums[meddle]){
   
			right = meddle-1;
		}else{
   
			return meddle;
		}                                 
	}
	return right+1;
}



二分法的第二中写法
Class Solution{
   
public int searchInsert(int[] nums,int target){
   
	int n = nums.length;
	int left = 0;
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值