Day1|Leetcode 704(34.35) 27

704 Binary Search

题目中需要注意的:

  1. Sorted in ascending order

  1. All are unique

代码(左闭右开)

Day1|Leetcode 704(34.35) 27_第1张图片

重点:

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

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

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

Leetcode 34

Day1|Leetcode 704(34.35) 27_第2张图片

Day1|Leetcode 704(34.35) 27_第3张图片

注意:

  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& nums, int val) {
        int k=0;
        for(int i =0;i + k< nums.size(); i++){
            if(nums[i] == val){
                for(int j=i; j

问题:

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

class Solution {
public:
    int removeElement(vector& 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 ==的情况】

你可能感兴趣的:(c++)