刷题体验第一天——《录鼎记》第一章
先来解释为啥用这个标题(除了蹭一点之外呢),第一个字,代表刷题的题目来源是《代码随想录》,而鼎有两种解释,一种是谐音顶(原谅作者现在还是个菜鸟),另一个也是时刻提醒自己,不能眼高手低,要切实的去刷每一道题。
今天的任务是: 数组理论基础,704. 二分查找,27. 移除元素
贴出理论基础链接:
代码随想录代码随想录PDF,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随想录知识星球八股文https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
第一眼看到这个题,根据题目应该采用二分查找的方法,同时题目给了有序数组,就省去了我们自己对数组排序的步骤。如果是需要对数组排序,可以用(涉及到sort的用法,链接附上(63条消息) C++排序与sort_bool函数和sort_practical_sharp的博客-CSDN博客)
sort(nums.begin(),nums.end());
代码随想录
之后就自己尝试写了第一版代码
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0 ;int right = nums.size()-1;while(left<right){int mid =left +(right-left)/2;if(nums[mid]==target){return mid;}else if(nums[mid] > target){right = mid -1;}else{left = mid +1;}}return -1;}
};
因为不久前刷了一遍,感觉思路是对的。。但是样例过了,提交的时候出问题了。其实自己也很清楚问题会出在哪里,再一看错误样本就直接明白了。是在只有一个元素的时候直接返回不存在了。循环条件加上 = 就可以了。
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0 ;int right = nums.size()-1;while(left<=right){int mid =left +(right-left)/2;if(nums[mid]==target){return mid;}else if(nums[mid] > target){right = mid -1;}else{left = mid +1;}}return -1;}
};
这是正确版。再回去看代码随想录的时候,发现自己还遗漏了一点:
nums中的所有元素是不重复的。如果可重复的话,就要再麻烦一点,因为下标可能不唯一。
当然C哥还总结了两种写法,因为我一贯用的第一种方法(全闭区间),所以一开始写的时候也是这种思路。全闭区间注意在left == right 时应有定义!!
二、移除元素
力扣题目链接 (opens new window)
这一题需要注意的点时不能使用额外的数组空间,就是只能用当前数组做事。还有不用考虑超出新长度后面的元素。其余感觉没啥坑点,但要注意的是题目中有说可以改变元素的顺序。这样子这个题目就有很多种解法了。
代码随想录
我个人比较喜欢用双指针,将从前往后的符合的数值用后面不需要移除的数值替换的方法。以下是根据此方法写的第一版代码:
class Solution {
public:int removeElement(vector<int>& nums, int val) {int left = 0;int right = nums.size()- 1;int num = 0;while(left<=right){if(nums[left] != val){num++;left++;}else{while(nums[right] ==val){right--;if(right<left){return num;}}nums[left++] = nums[right--];num++;}}return num;}
};
还是错了很多遍的,比如说没有注意到right<left的情况。还是要注意一些特殊情况的。
但是y1s1,这种方式还是比暴力解法要快的,毕竟省去了重复覆盖的过程,后续的val值也有一些直接跳过了。
我用的是相向双指针法,其实同向的双指针法也很简单,就是快指针在遇到val值时会直接跳过去,单慢指针会走这一点,并将快指针指向的,非val点的值覆盖到上面。代码如下:
class Solution {
public:int removeElement(vector<int>& nums, int val) {int slowIndex = 0;for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {if (val != nums[fastIndex]) {nums[slowIndex++] = nums[fastIndex];}}return slowIndex;}
};
注意点是快慢指针的距离是逐渐拉开的,理解这个应该就能理解算法了。
两道算法题大致内容就是这样,今天的题目不久前刷过一遍,感觉遇到的阻碍较少,花了一个半小时左右(加上博客),算是复习相关题目了,感觉熟练度不够,我去肝相关题目了。
刷题体验第一天——《录鼎记》第一章相关推荐
- 《剑指Offer》Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈)
<剑指Offer>Java刷题 NO.36 两个链表的第一个公共结点(链表,等长拼接法,长者先行法,辅助栈) 传送门:<剑指Offer刷题总目录> 时间:2020-06-19 ...
- 改善好UI交互,创建题库,导入试题,刷题体验感
UI交互调整 土著刷题微信小程序v1.1在开发方向上做了调整,完全成为一个提供围绕刷题相关功能的工具,在UI交互方面虽然参考了市面上刷题软件的UI交互,但在自己使用期间仍觉得有些别扭,所以在 ...
- 《录鼎记》第十三章——有史最长篇
今日内容: 层序遍历 10 226.翻转二叉树 101.对称二叉树 2 一.二叉树的层序遍历 力扣题目链接 (opens new window) 思路一:队列实现,将根节点推入,之后在队列非空时,记录 ...
- C#LeetCode刷题之#387-字符串中的第一个唯一字符(First Unique Character in a String)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3939 访问. 给定一个字符串,找到它的第一个不重复的字符,并返回 ...
- 《录鼎记》——重启之回溯part04
今日任务: 93.复原IP地址 78.子集 90.子集II 一.复原IP地址 力扣题目链接 (opens new window) 如果说能想到和上到题一样是切割,就有基本的思路了. 回溯三部曲:1.递 ...
- 《录鼎记》——重启之回溯part05
今日任务 * 491.递增子序列 * 46.全排列 * 47.全排列 II 一.递增子序列 力扣题目链接 (opens new window) class Solution { public:vect ...
- 《录鼎记》——重启之回溯part03
第七章 回溯算法part03 39. 组合总和 40.组合总和II 131.分割回文串 一.组合总和 力扣题目链接 (opens new window) 回溯三部曲 1.回溯函数参数及返回值,用par ...
- 力扣刷题流程-参考别人的经验觉得很有道理的
刷题几个阶段: 1,第一遍:知道.直接看答案,不要自己想,了解所有最优解,方法技巧第一.做题套路,以印象为主. 2,第二遍:熟悉.过easy题,记住:做medium,重点题背,反复背.最简单会,大多不 ...
- c语言程序设计平时作业代刷,C语言程序设计——小学生口算刷题系统
程序函数关系图 函数功能及全局变量介绍 代码中已有详细注释的地方不再进行解释. 全局变量 Cut( )函数 此函数用于分割界面,使界面更为美观. Start( )函数 此函数集成了开始菜单,年级的输入 ...
最新文章
- 重磅!MaxCompute助力阿里开源自研语音识别模型DFSMN,准确率高达96.04%
- java运行在用户态_理解Linux用户态和内核态
- java 月第一天_java获取当前月第一天和最后一天
- 收藏 | 2015年度大数据应用经典案例Top100
- svn文件大小类型限制,提交必须加多少字的说明
- 深入理解DOM节点关系
- win10 mysql5.7.11_Windows10安装与配置MySQL-5.7.11
- CentOS 7 启动与切换图形界面
- (转)多因子模型水平测试题
- 尘埃4 for Mac(DiRT4赛车竞速游戏)原生版
- 前端 ---- CSS基础
- AVR单片机与C语言的一些入门简要概述
- 测试用的美国信用卡账号
- php artisan migrate,关于laravel 5.1下php artisan migrate的使用
- 马尔可夫决策过程(Markov Decision Process, MDP)
- 修改数据库账号密码(最新版本)
- 基于矩阵分解的协同过滤算法
- 关闭计算机网络重启功能,如何按计划关闭或重启计算机
- 大数据平台安装实验: ZooKeeper、Kafka、Hadoop、Hbase、Hive、Scala、Spark、Storm
- 淘宝店铺买家订单+淘宝店铺买家订单物流获取步骤说明