Day1|Leetcode 704(34.35) 27

704 Binary Search

题目中需要注意的:

  1. Sorted in ascending order

  1. All are unique

代码(左闭右开)

重点:

  1. while区间:当为左闭右开时,如果left = right, [left, right)是一个空集,无意义,所以应该为left < right

  1. 给左右附值时,因为右边为开,所以搜索的过程中不包括右边界的值,right = mid;左边为闭, 包括在其中,所以不应该再搜索一遍,left = mid + 1

*Leetcode35 注意返回left的值为(mid +1)

Leetcode 34

注意:

  1. 注意最后返回值的时候会出现一直找不到出界的问题,所以需要加上left < nums.size()和right > 0; 在找右边界的时候有两点需要注意:

1)right为开,所以right是不能=0的,所以当写right >= 0的时候出现很多问题

2)需要用left-1去跟target的值做比较(写34的时候就出现过这个问题,下次一定要注意)

2.感觉这道题用左闭右闭会更好写一些,因为不用纠结最后取left的值还是right值(还没有写,不太确定)

Leetcode 27 Remove Element

  1. 暴力解法

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int k=0;
        for(int i =0;i + k< nums.size(); i++){
            if(nums[i] == val){
                for(int j=i; j<nums.size()-1-k; j++){
                    nums[j] = nums[j+1];
                }   
                k++;
                i--; 
            }
        }
        
        return nums.size()-k;
    }
};

问题:

考虑到左移,但没写出来(正确i--就可以了);没注意j的边界值

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow = 0;
        for(int fast =0; fast < nums.size(); fast++){
            if(nums[fast] != val){
                nums[slow++] = nums[fast];
            }
        }
        return slow;
    }
};

注意:

  1. 快慢指针

  1. 一开始用的条件是fast == val, 会出现fast出界问题(fast为外部边界,如果先加fast就可能出现一溢出现象,如果换成固定fast每次只加一,slow进行停止或增加,就会避免这个问题)【之后试一下fast ==的情况】

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值