二分查找法:
要求:需要有序的数组,快速查找指定数据
移除元素:
要求:要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
暴力解法:两层循环
快慢指针:一层循环,快指针快速搜查新数据,将满足要求的新数剧放在慢指针中
相向指针:右边的指针从右边往左搜索数据--,同时左边在检索该位置的是否可以删除,可以删除则将右边的数据存过来。如下面列子
num= 【 0 ,1,2,3,3,0,4,2】删除元素2
如果快慢指针 得到【0 ,1,3,3,0,4】顺序不会改变
如果是相向指针 得到【0,1,4,3,3,0】顺序发生了变化
注意这里的left--,这里使用的原因是因为没有判断right的数字是否等于val就移过来了,所以需要相当于退回去一步,下一次重新判断这个值移过来的是否等于 val
class Solution {
public int removeElement(int[] nums, int val) {
//相向指针
int left=0 ;
int right= nums.length-1 ;
for (left = 0;left <= right ;left++){
if(nums[left]==val){
nums[left]=nums[right];
right--;
left--;
}
}
return left;
}
}
数组尺寸大小问题:
- 对于数组,使用
array.length
获取长度。 - 对于字符串,使用
string.length()
方法获取长度。 - 对于集合类,使用
collection.size()
方法获取元素数量。 -
在 Java 中,字符串的长度是通过调用
length()
方法获取的,而不是通过访问属性。这是因为在 Java 中,字符串是对象,而不是基本数据类型。对象的属性通常通过方法访问,这符合面向对象编程的封装原则。对于数组,
length
是一个公共的实例变量(属性),所以可以直接访问。关于
size()
方法,一般在处理集合类时使用,如ArrayList
、HashSet
、HashMap
等。集合类属于 Java Collections Framework,它们提供了丰富的操作方法,包括size()
方法来获取集合中元素的数量。