算法学习记录DAY1

题源(力扣平台)

解题算法原理:

数组划分/分块题:"双指针"算法---利用数组下标充当"双指针"

为什么?

1.题目要求不创建新的数组空间

2.利用数组下标"随机存取、访问元素"的性质

核心是对数组元素进行分类,分了两大类,在遍历元素进行处理的时候需要第一个cur指针,用来区分已处理和未处理的元素;而另一个des指针则是用于区分已处理的元素中分属地两类

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        // //数组长度<=1,无需交换
        // if(nums.size() <= 1) return;
        // //定义双指针
        // int des = -1, cur = 0, n = nums.size();
        // //用于元素交换
        // int tmp = 0;
        // //循环结束条件
        // while(cur < n){
        //     if(nums[cur] == 0) cur++;
        //     else{
        //         tmp = nums[des + 1];
        //         nums[des + 1] = nums[cur];
        //         nums[cur] = tmp;
        //         des++;
        //         cur++;
        //     }
        // }
        // return ;
        for(int des = -1, cur = 0; cur < nums.size(); cur++){
            if(nums[cur] != 0){
                swap(nums[++des], nums[cur]);
            }
        }
    }
};

注释部分是自己写的代码

与参考代码相比

可优化点:

1.变量的"可见范围"

复制代码
// 写法 A - 函数级作用域
int des = -1, cur = 0;
while(cur < n) { ... }
// ❓ 这里 des 和 cur 还能被访问到吗?

// 写法 B - 循环级作用域  
for(int des = -1, cur = 0; ...; ...) { ... }
// ❓ 这里 des 和 cur 还能被访问到吗?

问题1:哪种写法能防止后续代码意外修改这两个变量?

2:代码意图

当看到 for(int des = -1, ...) 时,能不能立刻知道:

  • des 只在这个循环里使用?
  • 循环结束后它就不再重要了?

对比 :如果写在函数开头,后面还有 50 行代码,读者需要怎样判断 des 的使用范围?

3:初始化时机

复制代码
// A
int des = -1;
// ... 中间可能有其他代码 ...
for(; cur < n; ) { ... }

// B
for(int des = -1; ...; ...) { ... }

问题 :哪种写法能保证 des 一定在使用前被正确初始化?

核心原则

"变量应该在其最小必要作用域内声明"

  1. 减少意外错误 - 作用域外无法访问
  2. 代码更清晰 - 声明靠近使用位置
  3. 便于维护 - 修改时影响范围更小

以上来自AI给出的优化原因

在今后的代码书写中,要遵循"将变量在最近的作用域中优化"的原则

相关推荐
CN-Dust26 分钟前
【C++】输入cin例题专题
java·c++·算法
嵌入式小企鹅1 小时前
CPU供需趋紧、DeepSeek V4全链适配、小米开源万亿模型
人工智能·学习·开源·嵌入式·小米·算力·昇腾
三品吉他手会点灯7 小时前
C语言学习笔记 - 20.C编程预备计算机专业知识 - 变量为什么必须的初始化【重点】
c语言·笔记·学习
sakiko_7 小时前
UIKit学习笔记1-创建项目(使用UIKit)、使用组件
笔记·学习
生信碱移7 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业8 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
星幻元宇VR9 小时前
VR航空航天科普设备【VR时空直升机】
科技·学习·安全·生活·vr
_李小白9 小时前
【android opencv学习笔记】Day 2: Mat类(图片数据结构体)
android·opencv·学习
智者知已应修善业10 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机
harder32110 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式