6 长风Qiu

尚未进行身份认证

A Linux C++ Programmer.

等级
博文 725
排名 1k+

03_decorator_装饰者模式

背景设计一个咖啡饮料订单系统,能够获取每一种饮料的价格和描述饮料由咖啡和调料组成,每种咖啡可以搭配多种调料现有的设计:每种咖啡和调料的组合都生成一个类,单独生成价格和描述问题高耦合,咖啡和调料静态绑定后直接导致类爆炸类爆炸直接导致一系列的开发维护问题解决方案将咖啡和调料从静态绑定换成动态组合UML类图代码packagemainimport"fmt"typ...

2019-04-16 15:58:12

02_observer_pattern_订阅者模式

背景设计一个天气状态服务器,实时监测温度、湿度和气压,并将最新状态同步给订阅者。旧设计方案:将每个订阅者的更新代码写死到服务端代码里。问题高耦合,服务端代码需要知道订阅者的实现违反了开闭原则,新加订阅者需要修改服务端代码解决方案约定发布者跟订阅者之间的接口,抽象出注册、注销、通知这三个方法,发布者暴露出这三个方法给订阅者使用即可UML类图代码packagemain...

2019-04-07 19:35:10

01_strage_pattern_策略模式

背景你需要中途接手开发一个模拟鸭子的游戏,游戏中有各种鸭子,它们有着不同的外貌,会游泳swim,会叫quack,后面可能会添加其他行为,比如飞行fly。你的上一任开发已经离职,他对此系统采用了标准的OO技术,设计了一个鸭子超类,并让各种鸭子继承此超类。问题代码重复问题。各种鸭子叫的方式不尽相同,如果每种鸭子都实现一份swim方法的话会出现大量重复代码。扩展性问题。如果给父类添加fl...

2019-04-07 16:11:49

设计模式学习笔记开篇

最近有一个想法:想要系统、灵活地学习设计模式,将其内化到自己的专业技能之中,达到凭借直觉即可应用的地步。动机从毕业到现在工作已经快两年的时间了,回望过去,感觉技术上毫无积累,这并不是一个我喜欢的状态,反而让自己内心有些慌。为了职业生涯的长远打算,遂决定深入学习一些专业技能,先从《设计模式》开始。因为设计模式上可指导架构,中可夯实设计,下可驾驭编码,是一种能够统摄全局的心法,掌握它的收益性还是...

2019-03-31 11:08:38

[LeetCode]9. Palindrome Number

funcisPalindrome(xint)bool{ifx<0||(x!=0&&x%10==0){returnfalse}sum:=0forsum<x{sum=sum*10+x%10x/=10}ret...

2019-03-06 11:35:19

[LeetCode]8.String to Integer (atoi)

由于负数范围比正数大,所以中间结果用负数保存funcmyAtoi(strstring)int{ startPos,mark:=func(strstring)(int,int){ mark:=1 fori:=0;i<len(str);i++{ ifunicode.IsSpace(rune(str[i])){ continu...

2019-03-05 15:25:26

全排列

可以使用并发的方式来跑。voidPermutationImpl(char*begin_ptr,constchar*ori_str){if(*begin_ptr=='\0'){printf("%s\n",ori_str);return;}for(char*cur_ptr=begin_ptr;*cur...

2019-02-21 08:57:12

[LeetCode]6. ZigZag Conversion

热身练手题funcconvert(sstring,numRowsint)string{ifnumRows<=1||len(s)<=numRows{returns}varresult[]byte//字符串拼接varkGroupSize=numRows*2-2len:=...

2019-02-16 09:53:29

[LeetCode]5. Longest Palindromic Substring

题解:遍历字符串,以每个字符为回文串的中心,对于aabbaa这种形式,将bb合并,这样就可以统一处理代码:funclongestPalindrome(sstring)string{len:=len(s)iflen<=1{returns}varmaxLen,maxLeft,maxRightint...

2019-02-15 22:51:33

[LeetCode]3. Longest Substring Without Repeating Characters

题解:直观上能想到肯定有复杂度为O(N)的算法,肯定是要遍历一次字符串,肯定要记录当前字符的位置,每遍历一个字符统计一下当前达到的最大子串长度,需要记录左边界的位置,并实时更新。代码:funclengthOfLongestSubstring(sstring)int{result:=0varm[256]intleft:=0f...

2019-02-15 18:10:06

[LeetCode]2. Add Two Numbers

原题题解:链表模拟加法,注意进位特殊处理代码:/***Definitionforsingly-linkedlist.*typeListNodestruct{*Valint*Next*ListNode*}*/funcaddTwoNumbers(l1*ListNode,l2*ListNode)*ListNode{...

2019-02-15 15:59:29

[LeetCode]1.Two Sum

原题题解:简单哈希表代码functwoSum(nums[]int,targetint)[]int{varresult[]intm:=make(map[int]int)fori,v:=rangenums{ifprev_idx,ok:=m[target-v];ok{resul...

2019-02-14 19:54:24

字典树的实现

字典树又称为前缀树或Trie树,是处理字符串的常见数据结构。本实现提供了以下四个主要功能。1.boolInsert(conststring&word)添加word,可重复添加2.boolDelete(conststring&word)删除word,如果word添加过多次,仅删除一个3.boolSearch(conststring&word)查询...

2018-06-02 11:43:56

UML关系总结

在UML中,事物间的关系按照isa,hasa和usea三个层级可以分为六种关系。分别是泛化:generalization、实现:realization、组合:composition、聚合:aggregation、关联:association以及依赖:dependency。1.泛化:generalization泛化是一种**isa**关系,表示一般到特殊的关系。比如“animal”...

2018-05-29 20:30:39

字符串转整数atoi

字符串转整数很容易把代码写得难看。下面这段代码算是难得的优雅了,精妙的地方在于使用负数存储中间值,避免了过多的边界检查,而且将遍历单独抽了出来,虽然多了次遍历,但是代码因此变得整洁,是个划算的权衡。boolIsValid(constchar*str,intlen){if(str==NULL||*str=='\0')...

2018-05-25 09:01:11

寻找二叉树的最大搜索子树

Node*GetMaxSubBST(Node*root){if(root==NULL)returnNULL;inttree_size=0;//最大搜索树的节点个数intmax_value=0;//记录root树中最大的节点值intmin_value=0;...

2018-04-24 09:39:10

二叉树的三种非递归遍历方式

#include<iostream>#include<algorithm>#include<stack>#include<cmath>#include<climits>usingnamespacestd;structNode{Node*left;Node*right;in...

2018-04-16 23:52:04

判断单向链表是否有环

/*问题:判断一个链表是否有环,有则返回环的入口节点,没有则返回NULL*思路:一个快指针和一个慢指针可以判断是否有环。设链表头节点的位置是a,快慢指针交点为b,环入口点为c.*dist(a,c)表示a点到c点的距离,R为环的长度*相交时慢指针走的距离为dist(a,c)+dist(c,b),快指针走的距离为dist(a,c)+dist(c,b)+NR*可推出公式NR...

2018-04-09 21:16:27

LintCode.360.滑动窗口的中位数

/**LintCode.360.滑动窗口的中位数*题目:*给定一个包含n个整数的数组,和一个大小为k的滑动窗口,从左到右在数组中滑动这个窗口,*找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第N/2个数字。)*样例:*对于数组[1,2,7,8,5],滑动大小k=3的窗口时,返回[...

2018-02-21 21:32:45

LintCode.391.数飞机

好久没有写博客。还有一个小时就从深圳回家过年,闲着没事就去LintCode随机找了道题练练手。题目描述:给出飞机的起飞和降落时间的列表,用interval序列表示.请计算出天上同时最多有多少架飞机?(如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。)样例:对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]],返回3。分析这道题目挺...

2018-02-13 17:10:00
奖章
  • Github
    Github
    绑定github第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。