算法修炼Day01|704. 二分查找、27. 移除元素

87 阅读1分钟

LeetCode:704. 二分查找

1.思路

利用数组元素的有序性,采取二分搜索法,每次检索从中间位置开始,有效降低时间复杂度。

2.代码实现
class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid = (left + right) / 2;
        while (left <= right) {
            if (target == nums[mid]) {
                return mid;
            } else if (target > nums[mid]) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
            mid = (left + right) / 2;
        } 
        return -1;
    }
}
3.复杂度分析

时间复杂度:O(logn).

空间复杂度:O(1).

LeetCode:27. 移除元素

1.思路

暴力解法:两层for循环,第一层遍历,判断,第二层遍历赋值

双指针法:定义快慢指针,快指针进行判断,慢指针负责不等于val值的元素把控

2.代码实现
// 暴力解法
class Solution {
    public int removeElement(int[] nums, int val) {
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            if (nums[i] == val) {
                for (int j = i + 1; j < len; j++) {
                    nums[j - 1] = nums[j];
                }
                i--;
                len--;
            }
        }
        return len;
    }
}
// 双指针法
class Solution {
    public int removeElement(int[] nums, int val) {
        int slowIdx = 0;
        for (int fastIdx = 0; fastIdx < nums.length; fastIdx++) {
            if (nums[fastIdx] != val) {
                nums[slowIdx] = nums[fastIdx];
                slowIdx++;
            }
        }
        return slowIdx;
    }
}
3.复杂度分析

时间复杂度:O(n).

空间复杂度:O(1)