第一题:二分查找
public class day1_二分查找 {
public static void main(String[] args) {
int demo_nums[]={-1,0,3,5,9,12};
int target=2;
System.out.println(search(demo_nums, target));
}
public static int search(int[] nums, int target) {
int first=0;
int last=nums.length-1;
int middle=(last+first)/2;
while (first<=last) {
middle=(last+first)/2;
if (target==nums[middle]) {
return middle;
}else if (nums[middle]>target) {
last=middle-1;
}else{
first=middle+1;
}
}
return -1;
}
}
注意好边界问题就行,注意加一减一,没什么可说的。
第二题:移除元素
1 | 2 | 3 | 5 | 3 | 5 |
思路(双指针):双指针的方法的个人理解。首先是快慢两个指针。这个慢指针,我可以把它看成存储 有效数据的指针,快指针看成去寻找有效数据的指针,两个指针同时出发,比如我们想去除逇是3,快慢指针同时指向1,此时可以这么理解,慢指针指的是我们需要存有效元素的位置,快指针指的是带判断的是否是有效元素,此时,发现是1,是有效的,那么第一个位置的元素就确定了就是1,接着我们去填第二个位置的有效元素,此时发现是2,和第一个同理,仍然就是2,接着看第三个位置,此时快指针指的是3,我们需要排除三,所以这时候快指针就接着往后移动,发现是5,符合规定,就把这个5填入慢指针指向的这个位置,这样就确认了第三个位置要填入的合格的元素。接着快慢指针同时向后移动,同理进行判断。当快指针遍历全部元素的时候,程序结束,因为快指针把全部逇候选元素遍历完了,有效的元素我们也都已经填入, 这个时候慢指针指向的以及慢指针之前的元素就是我们想要的元素了。
代码如下:
public class day1_移除元素 {
public static void main(String[] args) {
int[] demon={0,1,2,2,3,0,4,2};
int mytargett=2;
System.out.println(removeElement(demon, mytargett));
}
public static int removeElement(int[] nums, int val){
int low=0;
//快慢指针法
for(int fast=0;fast<nums.length;fast++){
if (nums[fast]!=val) {
nums[low]=nums[fast];
low++;
}
}
return low;
}
}