0%

本文是对自己算法学习的一个记录,囊括了算法初学者需要优先掌握的各类题目及解题思路和解题方法。记录于此一方面是分享给比较迷茫的算法初学者,可以参考这个大纲来刷题;另一方面是方便自己随时回顾。
代码一定要自己写,而且要经常回顾,重新写。光靠看是没有用的,不自己写一遍都不知道自己能写出多少bug。
学习大纲摘自极客时间专栏:数据结构与算法之美 - 王争 - 极客时间
部分算法题目参考自极客时间专栏:算法面试通关40讲 - 覃超 - 极客时间

阅读全文 »

✔️ 数据结构&算法

  1. 数据结构与算法之美 - 王争 - 极客时间
    学习数据结构与算法必入专栏,强烈推荐!个人心中给小争哥排为极客时间里最会讲解的作者之一。
    还要推荐另一个:设计模式之美 - 王争 - 极客时间

  2. 算法面试通关40讲 - 覃超 - 极客时间
    应对要求不是特别高的算法面试很足够了,配合楼上小争哥的《设计模式之美》食用,口味更佳。

  3. 清晰理解红黑树的演变—红黑的含义 - 甜菜波波
    “ 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。”
    本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解了过后,再去看什么旋转插入的东西,要清晰得多。换句话说,理解本文要描述的内容是从代码级理解红黑树的基础。

阅读全文 »

本文为关于Java内存模型,通过对《Java并发编程的艺术》一书以及一些相关文章的学习整理成的笔记。因这一块知识相互交叉,对于初学者来说会比较难理出一个清晰的结构,第一次接触学习时会感觉很混乱。遂整理出此文。如有错误,欢迎指正,谢谢。

阅读全文 »

题目

难度:简单

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

提示:

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-1-bits

阅读全文 »

题目

难度:困难

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens

阅读全文 »

题目

难度:困难

编写一个程序,通过填充空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 ‘.’ 表示。

提示:

  • 给定的数独序列只包含数字 1-9 和字符 ‘.’ 。
  • 你可以假设给定的数独只有唯一解。
  • 给定数独永远是 9x9 形式的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sudoku-solver

阅读全文 »

题目

难度:简单

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

  • 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element

阅读全文 »