代码随想录第一天打卡:数组Part

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

第一次写博客,万事开头难。第一天简要学习了数组与二分法的基本概念。并在视频的帮助下尝试了题目,发现自己基础有些薄弱,因此第一天贴一点看到的基础知识。

一、二分法&双指针

引用:

一、两种二分法

先来看左闭右闭 

1:while判断需要加上等于号  left <= right  因为在右闭状态下  = 有意义

2:right =  nums.size() - 1 因为数组下标从0开始

3:当num < target时 ,right = mid - 1;     因为右边是闭合的

然后再来看左闭右开

1:while判断不需要加等于号  left < right 因为在右开状态下 = 无意义

2:right = nums.size() 因为右边是开的,所以可以多加1

3:当num < target时 ,right = mid ;     因为右边是开的

二、双指针

双指针(快慢指针)

可以实现修改数组上的值

快指针每一次循环会遍历一个数组的一个数(遍历过程中判断数是否为我们需要删除的)

如果不是:慢指针指向的数组位置的值 = 快指针指向数组位置的值(并且慢指针++)

如果是:   慢指针不变 ,所指的数值也不变

————————————————
                        
原文链接:https://blog.csdn.net/JINbigXIA/article/details/137857393

二、题目

1.T704

代码如下(示例):

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

相关题目

见代码随想录:二分查找

2.T27:移除元素  :双指针法(今日重点)

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
 int valid_index = 0;
    
    // 遍历数组
    for (int i = 0; i < nums.size(); ++i) {
        // 当前元素不等于目标值时,将其移动到有效元素位置
        if (nums[i] != val) {
            nums[valid_index] = nums[i];
            valid_index++;
        }
    }
    
    // 返回新长度
    return valid_index;

    }
};

总结

注意:

  1. 二分法的使用条件
  2. 双指针法
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值