
算法策略
文章平均质量分 91
werflychen
曾经在腾讯百度从事过后台开发,现在一个券商从事后台开发,chenwenh@foxmail.com
展开
-
leetcode 旋转数组
这个旋转数组,看似挺简单,但真正想要不用调试,直接写出通过的,基本功还是要特别扎实,记自己通过的三种方法class Solution {public: /* solution 1:直接用了n个辅助空间,空间复杂度过高 */ void rotate(vector<int>& nums, int k) { vector<int> r...原创 2018-08-24 23:01:55 · 396 阅读 · 0 评论 -
二分搜索常用变种(N个相同目标,寻找第一个或最后一个目标元素)leetcode 278
/* * 二分搜索的一个变种,找到第一个等于target的下标 */ int binarySearchFirst(vector<int>& nums, int target) { if (nums.empty()) { return -1; } ...原创 2018-09-02 22:26:41 · 185 阅读 · 0 评论 -
二分搜索问题总结
最近工作中遇到了二分搜索问题。它是计算机课程中最基础的算法,这是我们在顺序查找时,最直接的一种提速的普遍性算法了,能够将一个顺序的查找的时间复杂度,从O(n)提升到了O(logn),这是质变的算法。首先我们来看一下一个经典的二分搜索算法:int BinarySearch(vector<int>& vec_arr, int target) { int left ...原创 2018-10-02 08:43:57 · 425 阅读 · 0 评论 -
一个分布式限流系统的设计思路
问题背景今天在参与面试的时候,候选人提到了一个他们项目做的一个项目中使用的限制系统的设计。大致思路如下,通过一个配置中心去获取每台机器的配额,然后本地做限流。当时就被挑战了这个思路,如果其他机器挂了,如何快速感知?马上就没答上来了。基于这个话题,今天想来简单分析一下,一个限流系统的设计思路。基本算法1、先讨论最简单的场景,单台机器,用什么方式来限制流量?通知一个非常简单的做法,暂且叫它为时间...原创 2018-11-13 00:32:05 · 1095 阅读 · 1 评论 -
redis的有序集的实现原理
有序集从用户的角度来看,有序集,它首先是一个集合,并且,他可以是顺序的。按照redis提供的命令来看,他可以通过指定key来查找成员,另一方面,可以通过指定score分数,来返回一个还区间的有序成员。如下图所示:哈希方案如果使用redis中的字典基本数据结构,从逻辑上讲,是能满足需求,在查找效率方面,能达到近O(1)时间复杂度。但如果要返回区间的时候,则需要进行内存排序操作,这个场景效率...原创 2018-11-18 23:35:38 · 1092 阅读 · 0 评论 -
redis的AOF持久化方案如何解决备份时数据一致性问题
AOF持久化redis支持两种持久化方案,一种是RDB,RDB直接保存的是数据。另一种是AOF方案,保存下来的是用户的操作过程,可以简单理解为把用户对数据库操作的命令保存下来了,通过回放,可以恢复数据的一种持久化方案。正常AOF逻辑为了满足效率要求,主进程对用户的每一次请求,会把请求写到AOF的缓冲区,然后再按一定的策略把AOF缓冲区的用户操作刷新的AOF磁盘文件中。AOF日志膨胀问题正...原创 2018-11-19 00:27:02 · 911 阅读 · 0 评论 -
求哈希散列值用求模还是用逻辑与
哈希表在使用key, value场景的时候,最常用的一个数据结构,能够实现O(1)时间复杂度的算法。而我们常用的算法中,一般是使用一个比目标空间略大一些的质数,通过对key做一次编码函数,得到一个整数值,再找到对应的目标空间的slot位置,进而做插入操作。如下所示:质数不妨假设为MAXid = fun(key),slot_id = id % MAX找到对应的slot位置进行查找或者插入修...原创 2018-12-01 23:31:20 · 413 阅读 · 2 评论