【内容】:数组理论基础,704. 二分查找,27. 移除元素
一、数组理论基础
数组是存放在连续内存空间上的相同类型数据的集合。可以方便的通过下标索引的方式获取到下标下对应的数据。数组的元素是不能删的,只能覆盖。
二、704. 二分查找
- target对比的是nums[mid],不是mid这个数!
- 区间进行缩扩,要剔除已经做对比的“nums[mid]”这个数,从它的左边或者右边开始,对它进行-1/+1.
- 要防止溢出,mid=left+(right-left)/2.
- 区间范围,即left<right 还是 ≤。
- java获取数组长度num.length;c++获取vector长度num.size().
java代码:
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
if (nums[mid] > target) right = mid - 1;
if (nums[mid] == target) return mid;
}
return -1;
}
}
c++代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size();
while(left<right){
//左闭右开[left,right)
int mid=left+(right-left)/2;
if(nums[mid]<target) left=mid+1;
if(nums[mid]>target) right=mid;
if(nums[mid]==target) return mid;
}
return -1;
}
};
三、27. 移除元素
注意:1.if和else if,不能用两个if。因为第一个if过后fast会增加,可能导致结果溢出。
java代码:
class Solution {
public int removeElement(int[] nums, int val) {
int fast=0; //快指针:新数组中所需要的元素
int low=0; //慢指针:新数组元素的下标志
while(fast<nums.length){
if(nums[fast]!=val){
nums[low]=nums[fast];
low++;
fast++;
}
else if(nums[fast]==val){
fast++;
}
}
return low;
}
}
c++代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast=0;
int slow=0;
while(fast<nums.size()){
if(nums[fast]!=val){
nums[slow]=nums[fast];
fast++;slow++;
}else{
fast++;
}
}
return slow;
}
};