【学习心得】算法刷题心得分享

news2024/11/20 1:35:11

一、为什么要刷题?

  1. 提升编程能力,强化对数据结构的理解,熟练掌握常用的算法等
  2. 为竞赛、考试做准备
  3. 找实习、找工作需要(上机考试+面试手撕代码)
  4. 提升自信心,放松一下

二、刷题前应该有哪些知识储备?

(1)基本掌握数据结构和常用算法

① 基本数据结构

  • 栈:后进先出(LIFO)的数据结构,用于存储元素,如函数调用栈。
  • 队列:先进先出(FIFO)的数据结构,用于按顺序处理元素,如打印任务队列。
  • 链表:通过节点连接元素,可动态增删元素,适用于非连续内存空间。
  • 树:节点间存在父子关系的层次结构,如二叉树、搜索树等。
  • 堆:特殊的树形数据结构,通常实现为完全二叉树,用于实现优先队列。

② 常用算法

  • 贪婪算法:在每一步选择中都采取最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。
  • 动态规划:通过把原问题分解为相对简单的子问题的方式来求解复杂问题的方法。
  • 分治算法:将原问题分解为若干个子问题,递归地求解子问题,并将子问题的解合并起来得到原问题的解。
  • 回溯算法:通过探索所有可能的候选解来找出所有的解,如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些修改来丢弃该解。
  • 分支限界:与回溯算法类似,但加入了剪枝操作,即在搜索过程中根据某种评估函数舍弃一些不可能得到最优解的分支,提高搜索效率。

(2)懂得如何入手进行算法设计与分析

  • 按照要求设计对应可以完成任务的算法
  • 算法复杂度分析

三、作为一名小白如何刷题?

(1)刷leetcode中的题目

① 目的:建立扎实的coding能力

② 方法

  1. 掌握一门基本的编程语言
  2. 按照特定模块进行系统性刷题(千万不要简单按照esay/mid/hard的顺序随机刷题)
  3. 具体按照哪一种模块的顺序刷题可以参考 https://www.zhihu.com/question/36738189
  4. 必须要反复刷题,做到一题多解(分析每一种解法的复杂度),而且不能只盯着高频题目
  5. 具体刷题:一看、二抄、三改、四写
  6. 现在leetcode上面有上千道题目,每个部分一定要找有代表性的题目去做,而且在刷题过程中会用模版去套用

(2)刷《剑指offer》中的题目

① 目的:建立求职面试的解题思路

② 方法

  1. 建议刷三遍
  2. 第一遍:不需要死磕,但是要完全弄懂题目,必须看题目的分析
  3. 第二遍:进一步熟悉题目,对一道题的各种变形也可以做出
  4. 第三遍:对于这不到100道题和一些相应的变形已是特别熟练的状态,上机编程没有问题,手撕代码也没问题

(3)可能遇到的问题与解决方案

① 可能遇到的问题

刷过的题目老忘记,刷题的速度很慢,坚持不下来

② 建议的解决方案

  1. 及时复习,反复刷题,与人分享,以及做笔记
  2. 制定计划,分解计划,快速刷题(为了节约时间,5分钟没有思路就不要浪费时间了,明确认知“你是为了通过面试”,理解不了的先背下来)
  3. 为自己制定奖惩措施,或者组队刷题

四、资料推荐

(1)书籍

  • 《大话数据结构》:用通俗易懂的方式介绍数据结构,适合初学者。
  • 《啊哈!算法》:通过生动的例子和故事讲解算法,增加学习乐趣。
  • 《图解算法》:通过图解的方式直观展示算法的执行过程,易于理解。
  • 《算法竞赛入门经典》:针对算法竞赛的入门书籍,适合有一定基础的读者。
  • 《hello算法》:深入浅出地介绍算法,适合对算法感兴趣的读者。

(2)课程

  • 中国大学MOOC《数据结构》(陈越):陈越老师主讲的经典数据结构课程,内容全面且深入。
  • 程序设计基础(C&C++)(戴波):涵盖C和C++语言基础及程序设计思想,为学习数据结构打下坚实基础。

(3)刷题网站

  • LeetCode:提供大量编程题目和在线评测,适合算法练习和面试准备。
  • 牛客网:不仅有在线编程题目,还有面试经验分享和模拟面试等功能。
  • PAT(Programming Ability Test):浙江大学推出的在线编程能力测试平台,题目难度较高。
  • 各大高校的OJ系统(如北大、浙大等):提供大量题目和在线评测,部分题目难度较高,适合挑战。
  • Codeforces:全球知名的编程竞赛平台,提供大量题目和在线比赛,适合提升算法水平。

【腾讯文档】刷题分享icon-default.png?t=N7T8https://docs.qq.com/mind/DY3JhS0VQaW12b3hL?mode=mind

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1791620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java代码审计之fastjson反序列化漏洞

fastjson反序列化漏洞分析 Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。该产品主要提供了两个接口&…

官宣!2024 MongoDB Developer Day来了!北上深三场等你集结!

北上深开发者 专为你们打造的 MongoDB Developer Day 来了! 动手实操工作坊➕模型设计优化专场 学习 NoSQL 数据建模的最佳实践 深入探索 MongoDB 的各种可能性 和开发者同行和 MongoDB 技术专家 一起度过充实的一天! 北京(6/22&…

UMLChina为什么叒要翻译《分析模式》?

UMLChina受机械工业出版社委托,重新翻译《分析模式》。 Martin Fowler的“Analysis Patterns,Reusable Object Models”,原书出版于1997年,至今为止未出第2版。 2004年,机械工业出版社出版该书中译本《分析模式》。 …

Django render()函数页面渲染

1, render() 函数 在Django框架中,render() 函数是一个非常有用的快捷方式,用于从视图函数返回一个完整的HTTP响应。它负责将给定的模板与上下文数据结合,渲染出最终的HTML页面,并返回一个HttpResponse对象。 from d…

千锋教育大优惠

IT全学科自学至尊卡(3年卡) Linux云计算运维、Python全栈、数据分析、人工智能、Java、大前端、网络安全、物联网、全媒体、影视剪辑等14大主流方向,300精品视频课程免费学。课程持续更新,电脑端手机APP小程序多平台无忧畅学&…

JavaWeb1 Json+BOM+DOM+事件监听

JS对象-Json //Json 字符串转JS对象 var jsObject Json.parse(userStr); //JS对象转JSON字符串 var jsonStr JSON.stringify(jsObject);JS对象-BOM BOM是浏览器对象模型,允许JS与浏览器对话 它包括5个对象:window、document、navigator、screen、hi…

【人工智能】第一部分:ChatGPT的基本概念和技术背景

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

王道408数据结构CH3_栈、队列

概述 3.栈、队列和数组 3.1 栈 3.1.1 基本操作 3.1.2 顺序栈 #define Maxsize 50typedef struct{ElemType data[Maxsize];int top; }SqStack;3.1.3 链式栈 typedef struct LinkNode{ElemType data;struct LinkNode *next; }*LiStack;3.2 队列 3.2.1 基本操作 3.2.2 顺序存储…

C++ Primer 总结索引 | 第十五章:面向对象程序设计

继承和动态绑定 对程序的编写 有两方面的影响:一是 我们可以更容易地定义与其他类相似 但不完全相同的新类;二是 在使用这些彼此相似的类编写程序时,我们可以在一定程度上 忽略掉它们的区别 在很多程序中都存在着一些相互关联 但是有细微差别…

用幻灯片讲解C++手动内存管理

用幻灯片讲解C手动内存管理 1.栈内存的基本元素 2.栈内存的聚合对象 3.手动分配内存和释放内存 注意:手动分配内存,指的是在堆内存中。 除非实现自己的数据结构,否则永远不要手动分配内存! 即使这样,您也应该通过std::allocator…

Linux 磁盘分区步骤

1.lsblk用于查看磁盘分区情况,lsblk -f用于查看uuid字符串以及挂载点。 以下是虚拟机部分添加磁盘的步骤。 其余没展示的都按照默认设置进入下一步即可。 2.添加完成后使用reboot重新进入后再使用lsblk就会发现磁盘sdb已经有了,但是没有分区。现在添加分…

Docker部署青龙面板

青龙面板 文章目录 青龙面板介绍资源列表基础环境一、安装Docker二、安装Docker-Compose三、安装青龙面板3.1、拉取青龙(whyour/qinglong)镜像3.2、编写docker-compose文件3.3、检查语法启动容器 四、访问青龙面板五、映射本地部署的青龙面板至公网5.1、…

JAVA小案例-break练习,随机数,到88停止

JAVA小案例-break练习,随机数,到88停止 代码如下: public class Break {/*** break练习,随机数,到88停止* param args*/public static void main(String[] args) {int count0;//计数器System.out.println("Begi…

揭秘AI 原生应用技术栈

一次性把“AI 原生应用技术栈”说明白 AI热潮持续,厂商努力推动有价值的应用涌现,并打造服务AI原始应用的平台产品。本文精简介绍业界最新的AI原生应用技术栈,让您迅速把握前沿科技脉搏。 整体架构 AI技术栈逻辑图精简呈现,多层…

搭建私有CA

1.设置独立服务器这台服务器就作为私有CA服务器 2.更新请求yum源 echo "#############Init Yum Source Start....." mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.…

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本(完全备份) 星期一运备份脚本(增量备份) 星期二备份数据(其他天--增量备份) 星期三备份数据(差异备…

Terraform安装+部署Azure Resource笔记

安装 下载 Terraform: 首先,访问 官方 Terraform 网站。找到适用于 Windows 的 Terraform 包,并下载 zip 文件。解压 Terraform 包: 将下载的 zip 文件解压到一个新文件夹中,命名为 “Terraform”。可以选择任何位置作…

【Linux】Linux工具——gdb

1. gdb 概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能…

创新“智”领长江经济带高质量发展研讨会调研实在智能

近日,创新“智”领长江经济带高质量发展研讨会暨央企智库沙龙第46期在浙江杭州顺利召开。 会议由中国联通主办,中国联通研究院、浙江联通、浙江省人民政府国有资产监督管理委员会联合承办,长江经济带沿线中央企业、地方国资国企等60余家单位…

SLAM精度评估—evo

evo是一款用于SLAM轨迹精度的评估工具。核心功能是(1)能够绘制(传感器运动)轨迹,(2)评估估计轨迹与真值(ground truth)的误差。evo支持多种数据集的轨迹格式(TUM、KITT、…