代码随想录算法训练营第一天 | 数组概念、二分查找、双指针

数组概念

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

二分查找

注意边界,常见的边界为左闭右开,左闭右闭。
如何判断$while()$循环条件是否带等号。
左闭右开[left, right) 不带等号
左闭右闭[left, right] 带等号
闭区间方需要进行“左+1 右-1”的操作,题目做35、35,拓展题34题没有思路,其他题还没看。

/*
 * [704] 二分查找
 */

// @lc code=start
class Solution {
    public int search(int[] nums, int target) {
        int right = nums.length - 1;
        int left = 0;
        int mid = 0;
        while (left <= right) {
            mid = left + (right - left) / 2;
            if (nums[mid] == target){
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
}
/*
 * [35] 搜索插入位置
 */

// @lc code=start
class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid = 0;
        while (right >= left) {
            mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target){
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
}

双指针

双指针思想主要是快慢更新数组,一个指针遍历数组,一个指针更新数组
做题 27、977 ,拓展题还没有看

/*
 * [27] 移除元素
 */

// @lc code=start
class Solution {
    public int removeElement(int[] nums, int val) {
        int sign = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[sign] = nums[i];
                sign++;
            }
        }
        return sign;
    }
}
/*
 * [977] 有序数组的平方
 */

// @lc code=start
class Solution {
    public int[] sortedSquares(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        int[] temp = new int[nums.length];
        for (int i = temp.length - 1; i >= 0; i--) {
            if (abs(nums[right]) > abs(nums[left])) {
                temp[i] = nums[right]*nums[right];
                right--;
            } else {
                temp[i] = nums[left]*nums[left];
                left++;
            }
        }
        return temp;
    }

    private int abs(int a){
        if (a < 0) {
            a = -a;
        }
        return a;
    }
}
posted @ 2026-03-04 23:39  月鸣  阅读(0)  评论(0)    收藏  举报