day 1

1.704. 二分查找 - 力扣(LeetCode)

day 1_第1张图片

1.1思路 

这道题的关键点,主要在于边界值是否要取

  1.  当选择左闭右闭的区间时
int search(int* nums, int numsSize, int target) {
    int left=0;
    int right=numsSize-1;
    int middle=0;
    //左闭右闭  数组默认为升序
    while(left<=right)//这里之所以可以取等号,是因为我们这里区间选择的是左闭右闭,
                      //故当left=right时,这个区间也是合法的
    {
        int middle=(left+right)/2;
        if(nums[middle]>target)
        {
            right=middle-1;//这里right=middle-1,是因为我的区间是左闭右闭 ,并且这里我们已经判
断了nums[middle]不是我们要找的
        }
        else if(nums[middle]

 2.当我们选择的是左闭右开的区间

int search(int* nums, int numsSize, int target) {
    int left=0;
    int right=numsSize;
    int middle=0;
    //左闭右开  升序
    while(lefttarget)
        {
            right=middle;//right=middle,因为我们的右区间是开的,并且下标middle
            我们已经判断好了,那么我们给的是[left,middle),
            如果给[left,middle-1),那么此时我们就nums[middle-1]这个数值就没有判断过。
        }
        else if(nums[middle]

2.27. 移除元素 - 力扣(LeetCode)

day 1_第2张图片

代码实现及思路 

int removeElement(int* nums, int numsSize, int val) {
    int left=0;
    for(int right=0;right

你可能感兴趣的:(算法)