代码随想录算法训练营第一天| 704.二分查找、27.移除元素

简介: 704 27

LeetCode 704 二分查找

题目链接:704.二分查找

二分法简单,细节是魔鬼,这个我是看了卡哥的视频,目前已经熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法

image-20230215081153090

注意两者的异同点。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        // int left = 0;
        // int right = nums.size() - 1;
        // // 左闭右闭的写法 左闭右开在下面right赋值不需要减一
        // while ( left <= right ){
        //     // c++定义基础不牢固,定义变量要加上变量类型
        //     int middle = left + ( right - left ) / 2; //防止溢出
        //     if ( nums[middle] > target ){
        //         right = middle -1;
        //     }
        //     else if ( nums[middle] < target ){
        //         left = middle + 1;
        //     }
        //     else{
        //         return middle;
        //     }
        // }
        // return -1;
        
        // 左闭右开写法
        int left = 0;
        int right = nums.size();
        // 左闭右闭的写法 左闭右开在下面right赋值不需要减一
        while ( left < right ){
            // c++定义基础不牢固,定义变量要加上变量类型
            int middle = left + ( right - left ) / 2; //防止溢出
            if ( nums[middle] > target ){
                right = middle;
            }
            else if ( nums[middle] < target ){
                left = middle + 1;
            }
            else{
                return middle;
            }
        }
        return -1;

    }
};
  • 时间复杂度:O(log n ),其中 n是数组的长度。
  • 空间复杂度:O(1)

LeetCode 27 移除元素

题目链接:27.移除元素

思路:这个题就相当于让实现库函数erase。

讲解视频

image-20230215085101986

暴力解法和双指针解法两种

暴力解法使用两层for ,第一层遍历整个数组,第二层用来更新覆盖数组 O(n^2) O(1)

双指针法定义两个指针,fast指针用来遍历数组找到target,slow指针用来更新数组中的元素从而实现覆盖 O(n) O(1)

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        // 双指针法
        int slow = 0;
        for ( int fast = 0; fast < nums.size(); fast++){
            if ( nums[fast] != val){
                nums[slow] = nums[fast];
                slow += 1;
            }
        }
        return slow;
        
        // // 暴力解法
        // int size = nums.size();
        // for (int i = 0; i < size; i++) {
        //     if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位
        //         for (int j = i + 1; j < size; j++) {
        //             nums[j - 1] = nums[j];
        //         }
        //         i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
        //         size--; // 此时数组的大小-1
        //     }
        // }
        // return size;
        
        //暴力中的i--是因为覆盖后下标i以后的数值都向前移动了一位,如果i不向前移动,就会导致无法删除两个相邻的val eg:[1,2,2,3,4] 2

    }
};
// 其次要注意本题的返回值
相关文章
|
16天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
17天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
46 1
|
26天前
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
|
1月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
12天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
18天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
6天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
6天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
14天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
|
11天前
|
算法
基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真
本研究提出了一种基于鲸鱼优化算法(WOA)的购售电收益与风险评估算法。通过将售电公司购售电收益风险计算公式作为WOA的目标函数,经过迭代优化计算出最优购电策略。实验结果表明,在迭代次数超过10次后,风险价值收益优化值达到1715.1万元的最大值。WOA还确定了中长期市场、现货市场及可再生能源等不同市场的最优购电量,验证了算法的有效性。核心程序使用MATLAB2022a实现,通过多次迭代优化,实现了售电公司收益最大化和风险最小化的目标。