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

目录

LeetCode 704.二分查找

题目链接:704. 二分查找 - 力扣(LeetCode)

代码实现:

总结:

LeetCode 27.移除元素

遇到的问题:

代码实现:

总结:


LeetCode 704.二分查找

题目链接:704. 二分查找 - 力扣(LeetCode)

解题思路:对于一个有序数组来讲,可以利用二分查找来查找数组中某一个元素,此方法又可以分为两个具体的思路(左闭右闭和左闭右开)。

遇到的问题:Java中的浮点数溢出问题以及对位运算不太熟悉。

代码实现:

左闭右闭:

class Solution {
    public int search(int[] nums, int target) {
        //首先要确定target是在数组nums的大小范围中,否则查找将失去意义
        if(targetnums[nums.length-1])
        return -1;

        int left = 0;
        int right = nums.length-1;

        while(right>=left)
        {
            int mid = left+((right-left)>>1);
            if(nums[mid]>target){
                right = mid-1;
            }else if(nums[mid]

左闭右开:

class Solution {
    public int search(int[] nums, int target) {
        //首先要确定target是在数组nums的大小范围中,否则查找将失去意义
        if(targetnums[nums.length-1])
        return -1;

        int left = 0;
        int right = nums.length;

        while(right>left)
        {
            int mid = left+((right-left)>>1);
            if(nums[mid]>target){
                right = mid;
            }else if(nums[mid]

总结:

要熟悉的掌握这两种方法,两种方法中mid的选取是不同的。

LeetCode 27.移除元素

题目链接:27. 移除元素 - 力扣(LeetCode)

遇到的问题:

对于双指针的操作不够熟练。

代码实现:

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;
        int right = nums.length-1;
        while(right >= 0 && nums[right] == val)
        right--;
        while(left <= right)
        {
            if(nums[left] == val)
            {
                nums[left] = nums[right];
                right--;
            }
            left++;
            while(right >= 0 && nums[right] == val)
            right--;
        }
        return left;
    }
}

总结:

慢指针指向新数组的元素,一次循环后需要右移一位以便接收下次循环快指针找到的元素,当快指针遍历完nums,快指针的下标实际上就是新数组的长度。

你可能感兴趣的:(leetcode,算法,职场和发展)