代码随想录算法训练营第一天【数组part01】 | 704. 二分查找、27. 移除元素

数组的基本概念

数组:存放在连续内存空间上的相同类型数据的集合。

举一个字符数组的例子:

代码随想录算法训练营第一天【数组part01】 | 704. 二分查找、27. 移除元素_第1张图片

数组的特点:

  • 数组下标都是从0开始的
  • 数组内存空间的地址是连续的

需要注意的是:因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址(数组的元素是不能删的,只能覆盖)。

C++的tips:

  • 要注意vector和array的区别,vector的底层实现是array,严格来讲vector是容器,不是数组
  • C++中二维数组在内存的空间地址是连续的

704.二分查找

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

代码随想录算法训练营第一天【数组part01】 | 704. 二分查找、27. 移除元素_第2张图片

代码:

class Solution {
public:
    int search(vector& nums, int target) {
        int left = 0, right = nums.size()-1;
        while (left <= right){
            int middle = (left+right)/2;
            if (nums[middle] < target)
                left = middle + 1;
            else if (nums[middle] > target)
                right = middle - 1;
            else
                return middle;
        }
        return -1;
    }
};

27. 移除元素

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

求解思路:

代码随想录算法训练营第一天【数组part01】 | 704. 二分查找、27. 移除元素_第3张图片

代码:

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int left = 0, right = 0;
        while (right < nums.size()){  
            if (nums[right] != val){
                nums[left] = nums[right];
                left++;
            }
            right++;
        }
        return left;
    }
};

你可能感兴趣的:(算法训练,算法)