Day1|Leetcode704. 二分查找 Leetcode27. 移除元素

前言: 第一次用leetcode刷题,格式有点不适应,之前都是acm模式,需要熟悉熟悉

Leetcode 704 二分查找

题目链接704 二分查找​​​​​​

解题思路:本题目只运用二分法(原理:不断分段查找区间内的值),没有别的坑。

但是要注意几个点,要注意使用二分法的前提,其次就是目标区间的左闭右闭和左闭右开的两种常见情况:

左闭右闭:

while(right>=left){//[left,right]区间合法
        
    if(target

左闭右开:

while(right>left){//[left,right)区间合法
        
    if(target

还要注意数组默认是从零开始的

OK,下面放代码:

class Solution {
public:
    int search(vector& nums, int target) {
        int left = 0;
        int right = nums.size() - 1; 
        while (left <= right) { 
            int mid = (left + right)/2;
            if (nums[mid] > target) {
                right = mid - 1; 
            } else if (nums[mid] < target) {
                left = mid + 1; 
            } 
            if(nums[mid] == target){
                return mid;
        }

     }
        return -1;
    }
};

Leetcode 27  移除元素

题目链接27 移除元素

本题有多个解法:

这里写两个比较常见的

第一个就是暴力:

class Solution {
public:
    int removeElement(vector& nums, int val) {
//两个简单的循环嵌套;元素少一个,数组统一往前移动一位,数组长度减少一;
     int long1 = nums.size();
     for(int i=0;i

下面是双指针法(更小的时间复杂度)

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int slow = 0;//慢指针
        
        for(int fast = 0;fast < nums.size();fast++){//快指针,这里说明快指针已经多走一步了

            if(val != nums[fast]){//如果快指针所指的元素和目标数不相同

                nums[slow] = nums[fast];//将快指针中的值赋给慢指针

                slow++;//所求数据加一;
            }
        }
        return slow;
    }
    
};
//还需多理解一下

endl  endl  endl ;

你可能感兴趣的:(leetcode,算法,笔记)