第一天 - 数组题目练习

3,196 阅读1分钟

二分查找

随想录的文章链接

programmercarl.com/0704.%E4%BA…

看完代码随想录之后的想法

二分查找作为经典的算法题,工作中也会用到。之前没想过关于左闭右闭,左闭右开的问题,一直都是用的左闭右闭。看完文章后,这里还是有点小收获的。

自己实现过程中遇到哪些困难

没碰到困难。

今日收获,记录一下自己的学习时长

文章10分钟,写代码5分钟。

public static int binarySearch(List<Integer> array, int target) {
    if (array == null || array.size() == 0) {
        return -1;
    }

    int left = 0, right = array.size() - 1;
    while (left <= right) {
        int middle = left + ((right - left) >> 1);
        if (array.get(middle) > target) {
            right = middle - 1;
        } else if (array.get(middle) < target) {
            left = middle + 1;
        } else {
            return middle;
        }
    }

    return -1;
}

移除元素

随想录的文章链接

programmercarl.com/0027.%E7%A7…

看完代码随想录之后的想法

双指针写起来有点复杂,容易出错,复制的次数也较高。题目要求可以改变数组元素的顺序,所以在移除元素时,可以把最后一个元素拷贝到当前元素。

自己实现过程中遇到哪些困难

没碰到困难。

今日收获,记录一下自己的学习时长

文章10分钟,写代码5分钟。

if (nums == null || nums.length == 0) {
    return 0;
}

int size = nums.length;
int i = 0;
while (i < size) {
    if (nums[i] == val) {
        nums[i] = nums[size - 1];
        size--;
    } else {
        i++;
    }
}

return size;