代码随想录——数组

目录

一、LeetCode704 二分查找

题目

思路

代码实现

1.暴力求解

2.二分查找

二、LeetCode27 移除数组元素

题目

​​

思路

代码实现

1.暴力解法

2.双指针解法

 


一、LeetCode704 二分查找

题目

代码随想录——数组_第1张图片

思路

1.可以暴力查找逐个遍历数组中的元素,但是会有超出时间限制的问题;

2.二分查找:逐次缩短target值所在的数组区间,最终输出数组下标;

代码实现

1.暴力求解

class Solution {
public:
    int search(vector& nums, int target) {
        int m = 0;
        int n = nums.size() - 1;
        for(int i = 0; i <= n; i++){
            if(target==nums[i]){
                return i; 
            }           
        }
        return -1;
    }
};

2.二分查找

class Solution {
public:
    int search(vector& nums, int target) {
        int m=0;
        int n=nums.size()-1;
        while(m<=n){
            //int key=(m+n)/2;
            int key = m + ((n - m) / 2);// 防止溢出
            if (nums[key] > target) {
                n = key - 1; // target 在区间nums[0,key-1]之间
            } else if (nums[key] < target) {
                m = key + 1; // target 在区间nums[key+1,n]之间
            } else {
                return key; //找到目标值,直接返回下标
            }
        }       
    return -1;
    }
};

二、LeetCode27 移除数组元素

题目

代码随想录——数组_第2张图片代码随想录——数组_第3张图片

思路

1.暴力解法:双层for循环,循环到相同元素的话,后面所有元素全部向前移一位,覆盖掉这个相同的元素

代码随想录——数组_第4张图片

2.双指针解法:

代码实现

1.暴力解法

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int length=nums.size();
        for(int i = 0; i < length; i++){
            if(val==nums[i]){//相等的话全部向前移动一位覆盖该元素
            for(int j = i + 1; j 

2.双指针解法

class Solution {
public:
    int removeElement(vector& nums, int val) {
        //双指针法
        int length=nums.size();
        int slow=0;
        int fast=0;
        //int right=length-1;
        for (int fast = 0; fast < nums.size(); fast++) {
            if (val != nums[fast]) {//相当于同步在走
                nums[slow] = nums[fast];
                slow++;
            }
            //相等情况下,fast指针向后一步,slow不动,然后nums[fast]覆盖nums[slow],同步向后走
        }
        return slow;
    }
};

三、LeetCode977 有序数组的平方

题目

代码随想录——数组_第5张图片

 代码实现

class Solution {
public:
    vector sortedSquares(vector& nums) {//函数类型
        int length=nums.size();//size函数 计算数组长度
        for(int i = 0; i < length; i++){
            nums[i]*=nums[i];
        }
        sort(nums.begin(),nums.end());//sort函数
        return nums;

    }
};

你可能感兴趣的:(leetcode,排序算法,算法)