代码随想录算法训练营Day1——704二分查找、27移除元素

1-1.704题二分查找

题目

704题二分查找

思路

经典二分法

代码

class Solution {
    public int search(int[] nums, int target) {
        int low = 0; 
        int high = nums.length - 1;
        int mid;
        while (low <= high){
            // mid = low + ((high - low) / 2); //防止溢出
            mid = (low + high) / 2;
            if (target == nums[mid]){
                return mid;
            }
            else if (target < nums[mid]){  //右区间左移
                high = mid - 1;
            }
            else{                          //左区间右移
                low = mid + 1;
            }
        }
        return -1;
    }
};

总结

  • 数组下标low=0,上标high=nums.length
  • 注意左闭右闭和左闭右开两种写法

1-2.27题移除元素

题目

27题移除元素

思路

暴力破解:找到待删除元素位置,不断将后置元素前移

代码

class Solution {
    public int removeElement(int[] nums, int val) {
            int size = nums.length;
            for (int i = 0; i < size; i++){
                if (nums[i] == val){        //找到需要移除的元素
                    for(int j = i + 1; j < size; j++){
                        nums[j - 1] = nums[j]; //将其他元素前移
                    }
                    i--;    //i及时回退
                    size--; //数组大小及时减1
                }
            }
            return size;
    }
};

总结

暴力破解:时间复杂度: O ( n 2 ) O(n^2) O(n2),空间复杂度: O ( 1 ) O(1) O(1)
双指针法:时间复杂度: O ( n ) O(n) O(n),空间复杂度: O ( 1 ) O(1) O(1)

你可能感兴趣的:(Leetcode,算法,数据结构,java)