Loading

算法:数组专项

1. 数组理论基础

数组理论基础

  • 数组是存放在连续内存空间上的相同类型数据的集合。
  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的。正是因为数组在内存空间的地址是连续的,所以删除或者增添元素的时候,需要移动其他元素的地址。
  • 数组的元素是不能删的,只能覆盖。
  • C++中二维数组在地址空间上是连续的。

2. 二分查找

leetcode 题目链接
【题目描述】

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

【思路】
二分查找思路很简单,实现时需要注意的是边界条件控制。也就是边界 [left,right)、[left,right] 是开还是闭的问题。

int binarySearch(vector<int>& nums, int target) {
    if (nums.size() <= 0)
        return -1;
    
    // [left,right],左闭右闭
    int left = 0;
    int right = nums.size() - 1;

    while (right >= left)
    {
        int mid = ((right - left) >> 2) + left; // 防止 left + right 越界
        if (nums[mid] == target)
            return mid;
        else if (nums[mid] > target)
            right = mid - 1;
        else
            left = mid + 1;
    }
    return -1;
}
posted @ 2022-04-11 20:02  锦瑟,无端  阅读(33)  评论(0编辑  收藏  举报