首页 > 编程语言 >代码随想录算法第一天704

代码随想录算法第一天704

时间:2023-09-07 09:25:38浏览次数:61  
标签:数组 nums 704 随想录 int 算法 https com 指针

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

学习(复习)数组理论基础:

​ (https://programmercarl.com/数组理论基础.html)

​ 新了解到Java中数组地址不是连续的。

704.二分查找

题目

题目链接:https://leetcode.cn/problems/binary-search/

文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html

视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

解题

  • 第一想法:

    • 实现整个二分查找的流程。
    • 可以用递归和普通循环,注意确定查找范围时的比较条件。
  • 第二想法:

    • 二分法前提是元素有序不重复。
    • 把分区的方式想简单了。
    • 具体实现时分区方式决定了是否要将边界元素包含到新查找范围中。
  • 错误代码及纠正

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

27.移除元素

题目

题目链接:https://leetcode.cn/problems/remove-element/

文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html

视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP

解题

  • 第一想法:

    • 暴力解法:遍历若nums[i]与val值相同,则把后面的数字一次前进一位,若不同则把记录数组长度变量自增一并继续向后遍历直到数组结束。

    • 没有想到怎么使用双指针。

      • 问题:1.整体思想无误,没有注意遍历指针在一个元素被移除后应该保持不动的细节.

        ​ 2.错误的将遍历指针的逻辑关系放在判别元素是否相同的分支中。

        ​ 3.代码实现是记录数目错误。

  • 第二想法:

    • 双指针:快指针获取新数组需要的元素,慢指针获取新数组需要更新的位置。基于此知道,注意循环结束条件,一遍AC。
  • 错误代码及纠正:

    错误:
    class Solution {
    public:
        int removeElement(vector<int>& nums, int val) {
            int len=0;
            for(int i=0;i<nums.size();i++)
            {
                if(nums[i]==val)
                {
                    for(int j=i;j<nums.size();j++)
                    {
                        nums[j]=nums[j+1];
    
                    }
                }
                    i--;
                    len++;
            }
            return len;
    
        }
    };
    正确:
        class Solution {
    public:
        int removeElement(vector<int>& nums, int val) {
            int len=nums.size();
            for(int i=0;i<nums.size();i++)
            {
                if(nums[i]==val)
                {
                    for(int j=i;j<nums.size()-1;j++)
                    {
                        nums[j]=nums[j+1];
    
                    }
                    i--;
                    len--;
                }
                 
            }
            return len;
        }
    };
    
  • 双指针代码:

    class Solution {
    public:
        int removeElement(vector<int>& nums, int val) {
            int fast =0;
            int slow=0;
            for(fast;fast<nums.size();fast++)
            {
                if(nums[fast]!=val)
                {
                    nums[slow]=nums[fast];
                    slow++;
                }
            }
            return slow;
    
        }
    };
    
    

今日收获(2.5h)

​ 复习二分查找和双指针,暴露两个问题

	1. 代码能力低,表现在循环条件控制不熟练,逻辑分支分辨有问题
	1. 逻辑思考能力问题,写题解时思维不流畅。

标签:数组,nums,704,随想录,int,算法,https,com,指针
From: https://www.cnblogs.com/High-source/p/17683944.html

相关文章

  • 嵌入式深度学习—硬件算法协同优化
    主要利用神经网络的三个特性:并行计算、数据复用模型具有稀疏性。很多模型中的权值为0或很小,数据经过以后会直接变为无用值深度学习具有鲁棒性,对数据的误差不敏感测试时固定点神经网络(Test-TimeFixed-PointNeuralNetworks)测试时固定点神经网络(Test-TimeFixed-PointNeur......
  • 代码随想录算法训练营第一天
    代码随想录算法训练营第一天|LeetCode704(二分查找)LeetCode35(搜索插入位置)LeetCode34(在排序数组中查找元素的第一个和最后一个位置 )LeetCode27(移除元素)数组理论基础数组是存放在连续内存空间上的相同类型数据的集合要点:数组下标都是从0开始的数组内存空间......
  • 分治算法学习
    思路分析:先找根(最大值)分为左右子树,转化为构建最大的左右子树,很明显,这里需要用到递归算法实现#include<bits/stdc++.h>usingnamespacestd;intnums[1001];voidconstructMaxTree(intarr[],intl,intr){ if(l>=r){ cout<<arr[l]<<""; return; } //找到最......
  • C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛
    AcWing第2场周赛竞赛-AcWing3626三元一次方程AcWing3626.三元一次方程-AcWing两层循环#include<iostream>usingnamespacestd;voidfind(intn){for(intx=0;x<=1000/3;x++){for(inty=0;y<=1000/5;y++){int......
  • 算法刷题:一步步优化系列01.最长连续序列
    题目链接:最长连续序列目录暴力解法(超时)优化内层查找(On->O1但超时)问题:重复的边界会重新迭代优化重复迭代:在值域而非定义域迭代,去重(超时)问题:值域大且元素离散度大时,会大量迭代到不存在的元素,空迭代优化空迭代:HashSet去重,每次迭代的元素都存在(26ms)从左边界重......
  • 安防监控/视频汇聚/云存储/AI视频智能算法引擎:遛狗AI检测算法详解
    根据最新修订发布的《中华人民共和国动物防疫法》规定:遛狗不栓绳,养狗不办证、未定期接种疫苗等行为都是违法行为。作为一个合格的“铲屎官"出门遛狗一定要牵好狗绳,保护他人和爱犬的安全。但就算法律明文规定,还是有很多人无视法律法规,在外遛狗不牵绳,任其自由活动。在日常管理中,遛狗......
  • 方案:TSINGSEE青犀视频AI智能算法平台电动车入梯检测解决方案
    一、方案背景随着大众的出行要求逐渐提升,交通拥堵现象也随处可见,电动车出行,就成了大家的首选。随着电动车数量的激增,众多用户为了个人方便,大多在室内停放或充电,有的甚至停放在走道、楼梯间等公共区域,由于电瓶车车体大部分为易燃可燃材料,一旦起火,燃烧速度快,并产生大量有毒烟气,人员逃......
  • 视频云存储/安防监控/AI分析/视频AI智能分析网关:垃圾满溢算法
    随着我国科技的发展和城市化进程加快,大家对于生活环境以及空气质量更加重视,要求越来越严格。城市街道垃圾以及生活区垃圾满溢已经成为城市之痛。乱扔垃圾,垃圾不入桶这些行为已经严重影响到了城市的美化问题。特别是炎热的夏日和雨水季节,大量垃圾堆放会释放有毒有害气体,暴雨过后,漂浮......
  • 安防监控/视频汇聚/云存储/AI视频智能算法引擎系统:遛狗检测算法详解
    根据最新修订发布的《中华人民共和国动物防疫法》规定:遛狗不栓绳,养狗不办证、未定期接种疫苗等行为都是违法行为。作为一个合格的“铲屎官"出门遛狗一定要牵好狗绳,保护他人和爱犬的安全。但就算法律明文规定,还是有很多人无视法律法规,在外遛狗不牵绳,任其自由活动。在日常管理中,......
  • Bresenham算法画椭圆
    目录椭圆特性Bresenham算法画椭圆区域1区域2算法步骤算法程序椭圆特性椭圆定义椭圆:平面内到定点F1、F2的距离之和等于常数2a(2a>|F1F2|)的动点P的轨迹。椭圆数学表达式:\[\tag{1}|PF1|+|PF2|=2a\]F1、F2称为椭圆的2个焦点,两焦点之间距离2c(|F1F2|=2c)称为焦距。椭圆与两焦点......