程序员应该如何学习算法?

news2024/11/18 23:21:39

算法不是纯粹拼智商的,初学者不要上来直接撸《算法导论》!这是血泪

  • 建议一:首先你得会一门程序设计语言

  • 建议二:基础知识,数据结构,推荐大家看一下《大话数据结构》这本书,这本书看过感觉,讲解的比较容易理解,因此,入门了解这些基础知识,这本书非常的合适。

  • 建议三:需要刷更多的题,持续刷更多的题

数据结构三大块

一维数据结构

  • 基础:数组array(string),链表linked list

  • 高级:栈stack,队列queue,双端队列deque,集合set,映射map (hash or map),etc

二维数据结构

  • 基础:树tree,图graph

  • 高级:二叉搜索树binary search tree (red-black tree,AVL),堆 heap,并查集disjoint set, 字典树Trie,etc

特殊数据结构

  • 位运算Bitwise,布隆过滤器BloomFitter

  • LRU Cache

算法八大点:

基石三大点:

  • If-else,switch --->brach

  • for, while loop -->Iteration

  • 递归Recursion (Divide & Conquer,Backtrace)

五大高级点:

  • 搜索Search:深度优先搜索Depth first search,广度优先搜索Breadth first search,A*,etc

  • 动态规划Dynamic Programming

  • 二分查找Binary Search

  • 贪心Greedy

  • 数学Math,几何Geometry

算法经典友好书籍

《算法红宝书第四版》

  • 对每一个算法知识点讲得都很详细,同时不是很繁琐,比较容易上手。

《图解算法》

  • 图例很多,语言通俗易懂,学起来比较有意思。

《算法导论》

  • 大家小学的时候肯定都有字典或工具书。

  • 我们就可以把《算法导论》当做工具书来使用,在学完了基本的算法与数据结构,大家想对某一个知识深入学习或者复习的时候,这个时候可以查一查《算法导论》。

曾有人说,数据结构这个东西,如果你不去学,可能一辈子都感受不到它的好。但一旦掌握,就会被它的强大威力所折服。

  • 它是底层开发的重要一环,保证底层系统的稳定性和高效性;......

  • 从功利角度,它是大厂必考,你不可避免,从长远角度,它将决定你的技术上限。

  • 一旦拿下了数据结构与算法,就如同站在巨人的肩膀上,在开发江湖占有一席之地。所以说难也得好好学

编程基础

 Java基础:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

Java Web-能制作中小型网站&企业管理系统
Javaweb:新版JavaWeb基础教程,Java web从入门到企业实战完整版
MySQL数据库: MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括

Java开发框架-Java企业级服务端开发技能
Maven:Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven
Git:Git全套教程,完整的git项目管理工具教程,一套精通git
SSM框架:2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术
MybatisPlus:MybatisPlus深入浅出教程,快速上手mybatisplus
Spring Boot:SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)
传智健康:Java项目《传智健康》,完整的企业级医疗行业项目(基于SSM+Zookeeper+Dubbo+Spring Security技术栈)
瑞吉外卖:Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目


零基础必备:全套Python教程_Python基础入门视频教程,零基础小白自学Python入门教程

python多线程黑马程序员python多线程编程_哔哩哔哩_bilibili

python基础进阶:Python深入浅出进阶教程【敢信?】收藏=点赞十倍
Python实战Djongo项目:python企业级开发项目-手把手从0到1开发《美多商城》
mysql数据库:MySQL全套教程,MySQL从基础到黑马订单案例实战
机器学习算法:3天快速入门python机器学习
聚类算法:360°解读机器学习经典算法——聚类算法
数据挖掘:Python教程,4天快速入门Python数据挖掘,系统精讲+实战案例
Web服务器:Python高级语法进阶教程_python多任务及网络编程,从零搭建网站全套教程
180分钟爬虫入门:180分钟轻松获取疫情数据,Python爬虫入门课
Scrapy框架:Python爬虫基础,快速入门Scrapy爬虫框架
多线程:python多线程编程

人工智能入门:智能机器人软件开发教程基础,从helloworld到神经网络
人工智能深度学习:智能机器人软件开发教程基础,从helloworld到神经网络
图像与视觉处理:人工智能教程|零基础学习计算机视觉快速入门

有用记得收藏哦,不定什么时候就失效了


刷题刷题刷题!力扣经典算法题

  • 1. Two Sum (两数之和), Easy, 11757 likes

  • 2. Add Two Numbers (两数相加), Medium, 6524 likes

  • 3. Longest Substring Without Repeating Characters (无重复字符的最长子串), Medium, 5845 likes

  • 4. Median of Two Sorted Arrays (寻找两个正序数组的中位数), Hard, 4303 likes

  • 5. Longest Palindromic Substring (最长回文子串), Medium, 3896 likes

  • 15. 3Sum (三数之和), Medium, 3582 likes

  • 53. Maximum Subarray (最大子序和), Easy, 3533 likes

  • 7. Reverse Integer (整数反转), Easy, 2970 likes

  • 11. Container With Most Water (盛最多水的容器), Medium, 2659 likes

  • 42. Trapping Rain Water (接雨水), Hard, 2552 likes

  • 20. Valid Parentheses (有效的括号), Easy, 2544 likes ✔️

  • 10. Regular Expression Matching (正则表达式匹配), Hard, 2273 likes

  • 26. Remove Duplicates from Sorted Array (删除有序数组中的重复项), Easy, 2146 likes ✔️

  • 136. Single Number (只出现一次的数字), Easy, 1958 likes

  • 22. Generate Parentheses (括号生成), Medium, 1946 likes

  • 206. Reverse Linked List (反转链表), Easy, 1886 likes ✔️

  • 21. Merge Two Sorted Lists (合并两个有序链表), Easy, 1832 likes ✔️

  • 70. Climbing Stairs (爬楼梯), Easy, 1791 likes ✔️

  • 300. Longest Increasing Subsequence (最长递增子序列), Medium, 1773 likes

  • 121. Best Time to Buy and Sell Stock (买卖股票的最佳时机), Easy, 1766 likes

  • 72. Edit Distance (编辑距离), Hard, 1743 likes

  • 14. Longest Common Prefix (最长公共前缀), Easy, 1707 likes

  • 198. House Robber (打家劫舍), Medium, 1585 likes

  • 9. Palindrome Number (回文数), Easy, 1568 likes

  • 146. LRU Cache (LRU 缓存机制), Medium, 1544 likes

  • 19. Remove Nth Node From End of List (删除链表的倒数第 N 个结点), Medium, 1494 likes ✔️

  • 33. Search in Rotated Sorted Array (搜索旋转排序数组), Medium, 1493 likes

  • 46. Permutations (全排列), Medium, 1484 likes

  • 101. Symmetric Tree (对称二叉树), Easy, 1483 likes

  • 84. Largest Rectangle in Histogram (柱状图中最大的矩形), Hard, 1472 likes

  • 39. Combination Sum (组合总和), Medium, 1466 likes

  • 13. Roman to Integer (罗马数字转整数), Easy, 1436 likes

  • 23. Merge k Sorted Lists (合并K个升序链表), Hard, 1436 likes ✔️

  • 17. Letter Combinations of a Phone Number (电话号码的字母组合), Medium, 1436 likes

  • 322. Coin Change (零钱兑换), Medium, 1414 likes

  • 32. Longest Valid Parentheses (最长有效括号), Hard, 1400 likes

  • 287. Find the Duplicate Number (寻找重复数), Medium, 1325 likes

  • 122. Best Time to Buy and Sell Stock II (买卖股票的最佳时机 II), Easy, 1306 likes

  • 160. Intersection of Two Linked Lists (相交链表), Easy, 1302 likes ✔️

  • 55. Jump Game (跳跃游戏), Medium, 1292 likes

  • 76. Minimum Window Substring (最小覆盖子串), Hard, 1280 likes

  • 200. Number of Islands (岛屿数量), Medium, 1270 likes

  • 78. Subsets (子集), Medium, 1269 likes

  • 31. Next Permutation (下一个排列), Medium, 1260 likes

  • 96. Unique Binary Search Trees (不同的二叉搜索树), Medium, 1257 likes

  • 148. Sort List (排序链表), Medium, 1248 likes

  • 236. Lowest Common Ancestor of a Binary Tree (二叉树的最近公共祖先), Medium, 1238 likes

  • 25. Reverse Nodes in k-Group (K 个一组翻转链表), Hard, 1230 likes

  • 6. ZigZag Conversion (Z 字形变换), Medium, 1226 likes

  • 152. Maximum Product Subarray (乘积最大子数组), Medium, 1223 likes

  • 215. Kth Largest Element in an Array (数组中的第K个最大元素), Medium, 1211 likes

  • 8. String to Integer (atoi) (字符串转换整数 (atoi)), Medium, 1168 likes

  • 41. First Missing Positive (缺失的第一个正数), Hard, 1163 likes

  • 283. Move Zeroes (移动零), Easy, 1162 likes

  • 141. Linked List Cycle (环形链表), Easy, 1161 likes ✔️

  • 98. Validate Binary Search Tree (验证二叉搜索树), Medium, 1156 likes

  • 124. Binary Tree Maximum Path Sum (二叉树中的最大路径和), Hard, 1152 likes

  • 105. Construct Binary Tree from Preorder and Inorder Traversal (从前序与中序遍历序列构造二叉树), Medium, 1149 likes

  • 34. Find First and Last Position of Element in Sorted Array (在排序数组中查找元素的第一个和最后一个位置), Medium, 1137 likes ✔️

  • 239. Sliding Window Maximum (滑动窗口最大值), Hard, 1114 likes

  • 142. Linked List Cycle II (环形链表 II), Medium, 1097 likes ✔️

  • 139. Word Break (单词拆分), Medium, 1097 likes

  • 45. Jump Game II (跳跃游戏 II), Medium, 1094 likes

  • 169. Majority Element (多数元素), Easy, 1089 likes

  • 234. Palindrome Linked List (回文链表), Easy, 1072 likes ✔️

  • 62. Unique Paths (不同路径), Medium, 1072 likes

  • 189. Rotate Array (旋转数组), Medium, 1057 likes

  • 94. Binary Tree Inorder Traversal (二叉树的中序遍历), Easy, 1052 likes ✔️

  • 56. Merge Intervals (合并区间), Medium, 1051 likes

  • 88. Merge Sorted Array (合并两个有序数组), Easy, 1041 likes ✔️

  • 560. Subarray Sum Equals K (和为K的子数组), Medium, 1036 likes

  • 279. Perfect Squares (完全平方数), Medium, 1035 likes

  • 35. Search Insert Position (搜索插入位置), Easy, 1005 likes

  • 24. Swap Nodes in Pairs (两两交换链表中的节点), Medium, 996 likes

  • 85. Maximal Rectangle (最大矩形), Hard, 983 likes

  • 28. Implement strStr() (实现 strStr()), Easy, 982 likes

  • 92. Reverse Linked List II (反转链表 II), Medium, 980 likes

  • 155. Min Stack (最小栈), Easy, 979 likes

  • 79. Word Search (单词搜索), Medium, 979 likes

  • 27. Remove Element (移除元素), Easy, 967 likes

  • 51. N-Queens (N 皇后), Hard, 965 likes

  • 75. Sort Colors (颜色分类), Medium, 961 likes

  • 102. Binary Tree Level Order Traversal (二叉树的层序遍历), Medium, 960 likes ✔️

  • 48. Rotate Image (旋转图像), Medium, 960 likes

  • 95. Unique Binary Search Trees II (不同的二叉搜索树 II), Medium, 955 likes

  • 64. Minimum Path Sum (最小路径和), Medium, 954 likes

  • 406. Queue Reconstruction by Height (根据身高重建队列), Medium, 947 likes

  • 226. Invert Binary Tree (翻转二叉树), Easy, 941 likes

  • 437. Path Sum III (路径总和 III), Medium, 937 likes

  • 104. Maximum Depth of Binary Tree (二叉树的最大深度), Easy, 937 likes

  • 237. Delete Node in a Linked List (删除链表中的节点), Easy, 936 likes ✔️

  • 337. House Robber III (打家劫舍 III), Medium, 929 likes

  • 18. 4Sum (四数之和), Medium, 918 likes

  • 91. Decode Ways (解码方法), Medium, 904 likes

  • 207. Course Schedule (课程表), Medium, 897 likes

  • 37. Sudoku Solver (解数独), Hard, 897 likes

  • 175. Combine Two Tables (组合两个表), Easy, 891 likes

  • 416. Partition Equal Subset Sum (分割等和子集), Medium, 886 likes

  • 238. Product of Array Except Self (除自身以外数组的乘积), Medium, 885 likes

  • 114. Flatten Binary Tree to Linked List (二叉树展开为链表), Medium, 877 likes

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

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

相关文章

华为OD机试用Python实现 -【连续字母长度 or 求第 K 长的字符串长度】 | 2023.Q1 A卷

华为OD机试题 本篇题目:连续字母长度 or 求第 K 长的字符串长度题目输入描述输出描述示例一输入输出说明示例二输入输出说明示例三输入输出说明Code代码编写逻辑最近更新的博客 华为od 2023 | 什么是华为od,od

zookeeper使用场景实战

ZK java客户端 zk官方客户端没有和服务端分离,同一个jar文件,我们直接引入zk的maven即可。注意版本匹配兼容 Curator curator java语言编程的zk客户端框架,curator项目是现在zk客户端中使用最多。 将我们平时使用的zk服务开发进行了封装&a…

【Linux】进程状态(阻塞、挂起、僵尸进程)

文章目录1 阻塞与挂起1.1 阻塞1.2 挂起2 进程状态前言: 当我们在Windows下双击运行一个程序,或是在Linux下通过 ./ 加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当…

科技和女性的今天,《赛博格宣言》半个世纪前就预言了

近几年,我们团队在实地探访各行各业数字化时,格外关注女性工作者的存在,一个强烈感受是:和女性主义理论中说的一样,因为有了数字化技术,工作对于体力、精力等要求不再苛刻,岗位上的女员工就多了…

设计模式~门面(外观)模式(Facade)-08

目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式&am…

类和对象万字详解

目录 一、面向对象与面向过程的区别 面向过程: 面向对象: 二、类的引入 class与struct爱恨情仇 class的语法 类的定义: 类的限定访问符 类的实例化 类对象模型 this指针的应用 三、封装 四、类的六个默认成员函数 构造函数 再谈…

基于NMOSFET的电平转换电路设计

一、概述: 在单片机系统中,5V、3.3V是芯片常用的电平。而在传输协议中(如IIC、SPI等协议),存在芯片与芯片的高电平和低电平定义的范围不一样,所以需要存在一个电平转换电路,来使芯片与芯片之间顺利的传输。 二、前置…

JDK动态代理(tedu)(内含源代码)

JDK动态代理(tedu)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546187 目录JDK动态代理(tedu)(内含源代码)源代码下载链接…

vue2学习笔记

文章目录1. 初识Vue2. 模板语法3. 数据绑定4. el与data的两种写法5. Vue中的MVVM6. 数据代理Object.defineProperty方法何为数据代理Vue中的数据代理7. 事件处理事件的基本使用事件修饰符键盘事件8. 计算属性姓名案例_插值语法实现姓名案例_methods实现姓名案例_计算属性实现姓…

dp-过河卒

题目描述 如图,A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。 例如上图

【HashMap】| 深度剥析Java SE 源码合集Ⅱ | 你会吗?

目录一. 🦁 HashMap介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 成员变量2.1.2 存储元素的节点类型2.1.2.1 链表Node类2.1.2.2 树节点类2.1.2.3 继承关系2.2 方法实现2.2.1 HashMap的数组初始化2.2.2 计算hash值2.2.3 添加元…

HTML URL

HTML 统一资源定位器 (Uniform Resource Locators) URL 是一个网页地址。 URL 可以由字母组成,如 "w3cschool.cn",或互联网协议(IP)地址: 120.79.88.157。大多数人进入网站使用网站域名来访问,因…

主流的“对象转换工具”使用示例大全以及性能的对比

目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct(推荐) ModelMapper OriK…

使用Vue实现数据可视化大屏功能(二)

引入数据大屏相关组件 用Datav插件做大屏可视化的组件,官网地址 http://datav.jiaminghi.com/ ,整个组件库都是基于Vue React版本实现,主要用于构建大屏数据可视化页面,具有很多种类的组件可以使用。其安装方式如下。 npm instal…

WebRTC中的NAT穿透

NAT简介 我们知道,WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下,实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。 我们先简单了解下NAT。NAT在真实网络中是常见的,它的出现一是为了解决ipv4地址不够…

2.1操作系统-进程管理:进程的同步与互斥、信号量与PV操作、PV操作与互斥模型、PV操作与同步模型

2.1操作系统-进程管理:进程的同步与互斥、信号量与PV操作、PV操作与互斥模型、PV操作与同步模型进程的同步与互斥PV操作PV操作与互斥模型PV操作与同步模型进程的同步与互斥 进程是动态的,有一些动态变迁的过程,进程在计算机中是可以同时存在…

JavaEE简单示例——Spring框架的简单介绍

简单介绍: 在我们之前创建的Java项目中,会发现我们的各种类,接口文件和配置文件都放在了一起,虽然我们也做了一些包管理去管理我们的这些文件,但是对于我们来说,这些操作还是太繁琐了,尤其是当…

Spark-RDD创建、并行分区

集合(内存)中创建 RDD 外部存储(文件)创建 RDD 并行与分区 分区的设定 集合(内存)中创建 RDD 从集合中创建 RDD,Spark 主要提供了两个方法:parallelize 和 makeRDD,从…

【源码解析】SpringBoot缓存之@Cacheable的快速入门和源码解析

快速入门 启动类上添加注解EnableCaching在方法上添加注解Cacheable。 OverrideCacheable(cacheNames "value", key "#code_#dictKey")public String getValue(String code, Integer dictKey) {return baseMapper.getValue(code, dictKey);}OverrideCac…

数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其头插函数(顺序表缺陷、单链表优点、链表打印)

单链表的概念单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的。每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置)。元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示的线性…