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

2023-02-01  本文已影响0人  QZzzzzzzzz

● 今日学习的文章链接,或者视频链接
● 自己看到题目的第一想法
● 看完代码随想录之后的想法
● 自己实现过程中遇到哪些困难
● 今日收获,记录一下自己的学习时长

第一天任务

704. 二分查找

class Solution {
    public int search(int[] nums, int target) {
        int length = nums.length;
        int low = 0;
        int high = length - 1;
        while (low <= high) {
            int mid = (high - low) / 2 + low;
            final int midVal = nums[mid];
            if (target == midVal) {
                return mid;
            }
            if (target < midVal) {
                high = mid - 1;
            }else {
                low = mid + 1;
            }
        }
        return -1;
    }
}

27. 移除元素

看着挺简单的题,还是试了好几次...
初步想法是左边一个指针,右边一个指针。

class Solution {
    public int removeElement(int[] nums, int val) {
        final int length = nums.length;
        int count = 0;
        if (length == 1) {
            return nums[0] == val ? 0 : 1;
        }
        int x = 0;
        int y = length - 1;

        while (x <= y) {
            // 从左侧找相等的
            while (x <= y) {
                int xVal = nums[x];
                if (xVal == val) {
                    count++;
                    break;
                }
                x++;
            }
            // 从右侧找不等的
            while (x < y) {
                int yVal = nums[y];
                if (yVal != val) {
                    break;
                } else {
                    count++;
                }
                y--;
            }
            if (x < y) {
                int temp = nums[y];
                nums[y] = nums[x];
                nums[x] = temp;
            }
            x++;
            y--;
        }
        return length - count;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读