摘要: 今天来聊一道简单却十分巧妙的算法问题:算出一共有几个和为 k 的子数组。 那我把所有子数组都穷举出来,算它们的和,看看谁的和等于 k 不就行了。 关键是, 如何快速得到某个子数组的和呢 ,比如说给你一个数组 ,让你实现一个接口 ,这个接口要返回 的和,而且会被多次调用,你怎么实现这个接口呢? 因为接 阅读全文
posted @ 2020-02-17 12:05 labuladong 阅读(503) 评论(0) 推荐(1) 编辑
摘要: 上篇文章 "洗牌算法详解" 讲到了验证概率算法的蒙特卡罗方法,今天聊点轻松的内容:几个和概率相关的有趣问题。 计算概率有下面两个最简单的原则: 原则一、计算概率一定要有一个参照系,称作「样本空间」,即随机事件可能出现的所有结果。事件 A 发生的概率 = A 包含的样本点 / 样本空间的样本总数。 原 阅读全文
posted @ 2020-02-17 12:04 labuladong 阅读(1005) 评论(0) 推荐(0) 编辑
摘要: 我知道大家会各种花式排序算法,但是如果叫你打乱一个数组,你是否能做到胸有成竹?即便你拍脑袋想出一个算法,怎么证明你的算法就是正确的呢?乱序算法不像排序算法,结果唯一可以很容易检验,因为「乱」可以有很多种,你怎么能证明你的算法是「真的乱」呢? 所以我们面临两个问题: 1. 什么叫做「真的乱」? 2. 阅读全文
posted @ 2020-02-17 12:01 labuladong 阅读(3404) 评论(0) 推荐(0) 编辑
摘要: 本文分两部分,第一部分列举几个有趣的位操作,第二部分讲解算法中常用的 n & (n 1) 操作,顺便把用到这个技巧的算法题列出来讲解一下。因为位操作很简单,所以假设读者已经了解与、或、异或这三种基本操作。 位操作(Bit Manipulation)可以玩出很多奇技淫巧,但是这些技巧大部分都过于晦涩, 阅读全文
posted @ 2020-02-17 11:58 labuladong 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 对于比较小的数字,做运算可以直接使用编程语言提供的运算符,但是如果相乘的两个因数非常大,语言提供的数据类型可能就会溢出。一种替代方案就是,运算数以字符串的形式输入,然后模仿我们小学学习的乘法算术过程计算出结果,并且也用字符串表示。 需要注意的是, 和 可以非常长,所以不可以把他们直接转成整型然后运算 阅读全文
posted @ 2020-02-17 11:57 labuladong 阅读(1153) 评论(0) 推荐(0) 编辑
摘要: 二分查找到底有能运用在哪里? 最常见的就是教科书上的例子,在 有序数组 中搜索给定的某个目标值的索引。再推广一点,如果目标值存在重复,修改版的二分查找可以返回目标值的左侧边界索引或者右侧边界索引。 PS:以上提到的三种二分查找算法形式在前文「二分查找详解」有代码详解,如果没看过强烈建议看看。 抛开有 阅读全文
posted @ 2020-02-17 11:55 labuladong 阅读(675) 评论(0) 推荐(0) 编辑
摘要: 首先说明一个问题,简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心里有个印象就好。 递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解题思想还是离不开递归),解决更具体问题的两类算法思想;贪心 阅读全文
posted @ 2020-02-17 11:54 labuladong 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 我们之前有两篇文章写了回文串和回文序列相关的问题。 寻找 回文串的核心思想是从中心向两端扩展: 这道题的关键在于,单链表无法倒着遍历,无法使用双指针技巧。那么最简单的办法就是,把原始链表反转存入一条新的链表,然后比较这两条链表是否相同。关于如何反转链表,可以参见前文「递归操作链表」。 其实, 借助二 阅读全文
posted @ 2020-02-17 11:41 labuladong 阅读(1548) 评论(0) 推荐(0) 编辑
摘要: 今天就来聊三道考察频率高,而且容易让人搞混的算法问题,分别是求子集(subset),求排列(permutation),求组合(combination)。这几个问题都可以用回溯算法解决。 一、子集 问题很简单,输入一个 不包含重复数字 的数组,要求算法输出这些数字的所有子集。 比如输入 ,你的算法应输 阅读全文
posted @ 2020-02-17 11:18 labuladong 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 接雨水这道题目挺有意思,在面试题中出现频率还挺高的,本文就来步步优化,讲解一下这道题。 先看一下题目: 就是用一个数组表示一个条形图,问你这个条形图最多能接多少水。 下面就来由浅入深介绍暴力解法 备忘录解法 双指针解法,在 O(N) 时间 O(1) 空间内解决这个问题。 一、核心思路 我第一次看到这 阅读全文
posted @ 2020-02-17 11:17 labuladong 阅读(2080) 评论(0) 推荐(0) 编辑
我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。