自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

长风的专栏

聚是一团火,散是满天星

  • 博客(719)
  • 资源 (4)
  • 收藏
  • 关注

原创 Haskell实现快排

使用haskell实现的快排代码真的是相当简洁,直观,很有美感。相对于C系列语言来说,haskell写算法的时候更关注算法本身是什么样子而不是怎么去实现这个算法,这点真的很棒。quicksort :: (Ord a) => [a] -> [a]quicksort [] = []quicksort (x:xs) = let smallPart = quicksort [a ...

2019-07-07 21:37:07 1120

原创 03_decorator_装饰者模式

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

2019-04-16 15:58:12 281

原创 02_observer_pattern_订阅者模式

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

2019-04-07 19:35:10 262

原创 01_strage_pattern_策略模式

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

2019-04-07 16:11:49 203

原创 设计模式学习笔记开篇

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

2019-03-31 11:08:38 174

原创 [LeetCode]9. Palindrome Number

func isPalindrome(x int) bool { if x<0 || (x!=0 && x%10==0) { return false } sum := 0 for sum < x { sum = sum*10 + x%10 x /= 10 } ret...

2019-03-06 11:35:19 192

原创 [LeetCode]8.String to Integer (atoi)

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

2019-03-05 15:25:26 261

原创 全排列

可以使用并发的方式来跑。void PermutationImpl(char *begin_ptr, const char *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 205

原创 [LeetCode]6. ZigZag Conversion

热身练手题func convert(s string, numRows int) string { if numRows <= 1 || len(s) <= numRows { return s } var result []byte // 字符串拼接 var kGroupSize = numRows * 2 - 2 len := ...

2019-02-16 09:53:29 101

原创 [LeetCode]5. Longest Palindromic Substring

题解:遍历字符串,以每个字符为回文串的中心,对于aabbaa这种形式,将bb合并,这样就可以统一处理代码:func longestPalindrome(s string) string { len := len(s) if len <= 1 { return s } var maxLen, maxLeft, maxRight int ...

2019-02-15 22:51:33 116

原创 [LeetCode]3. Longest Substring Without Repeating Characters

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

2019-02-15 18:10:06 108 1

原创 [LeetCode]2. Add Two Numbers

原题题解:链表模拟加法,注意进位特殊处理代码:/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { ...

2019-02-15 15:59:29 136

原创 [LeetCode]1.Two Sum

原题题解:简单哈希表代码func twoSum(nums []int, target int) []int { var result []int m := make(map[int]int) for i, v := range nums { if prev_idx, ok := m[target-v]; ok { resul...

2019-02-14 19:54:24 143

原创 字典树的实现

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

2018-06-02 11:43:56 325

原创 UML关系总结

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

2018-05-29 20:30:39 638

原创 字符串转整数atoi

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

2018-05-25 09:01:11 280

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

Node *GetMaxSubBST(Node *root) { if (root == NULL) return NULL; int tree_size = 0; // 最大搜索树的节点个数 int max_value = 0; // 记录root树中最大的节点值 int min_value = 0; ...

2018-04-24 09:39:10 421

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

#include <iostream>#include <algorithm>#include <stack>#include <cmath>#include <climits>using namespace std;struct Node { Node *left; Node *right; in...

2018-04-16 23:52:04 274 2

原创 判断单向链表是否有环

/* 问题:判断一个链表是否有环,有则返回环的入口节点,没有则返回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 324

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

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

2018-02-21 21:32:45 546

原创 LintCode.391.数飞机

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

2018-02-13 17:10:00 344 2

原创 gflags使用demo

gflags是来自google的一个C++命令行参数解析库,使用起来比getopt简单太多。// link arguments: -lgflags#include <gflags/gflags.h>#include <iostream>using namespace std;DEFINE_string(bind_ip, "localhost", "set bind ip");DEFINE_in

2017-07-20 17:55:47 765

原创 第二章 观察者模式

定义观察者模式定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。设计原则为了交互对象之间的松耦合设计而努力。松耦合的设计之所以能让我们建立有弹性的OO系统,能够应付变化,是因为对象之间的互相依赖降到了最低。代码实现需求有一个天气采集器,能够采集温度、湿度和气压,实现一个主题系统,该系统能够接受多个app的订阅,在采集器信息改变时,系统会获取到新的信息,并

2017-07-16 22:31:31 484 1

原创 第一章 设计模式入门之策略模式【C++11版】

什么是设计模式?我们写软件追求的一个终极目标就是“高内聚,低耦合”。设计模式就是一组实现这个目标的最佳实践。软件开发过程的一大特点是**变化**,

2017-07-16 18:55:40 410

原创 C++判断ip是否为保留ip

由于工作需要,项目里面的代码需要过滤掉本机的保留ip,在网上查了下现成的代码,各种不完整,然后参考着百度百科的ip词条写了个过滤的函数,在项目测试的时候发现漏掉了100.64.x.x这类保留ip,然后就去维基百科上找到了更全的ip过滤规则,手动重写了个,留作以后参考用。bool is_reserved_ip(const char *ip){ static const char *addre

2016-11-04 09:49:57 934

原创 ZZULIOJ 1726: 迷宫

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 20SubmitStatusWeb BoardDescription在很多 RPG (Role-playing Games) 游戏中,迷宫往往是非常复杂的游戏环节。通常来说,我们在走迷宫的时候都需要花非常多的时间来尝试不同的路径。但如果有了算法和计算机的帮

2015-04-20 20:10:51 1450

原创 HDU3038 How Many Answers Are Wrong 【并查集】

How Many Answers Are Wrong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3145 Accepted Submission(s): 1202Problem Description TT and FF

2015-04-05 23:17:28 1187

原创 合法IP检测

**合法IP检测: 首先检测是否有非法字符, 然后检测点的数量, 然后检测是否有点在开头或结尾或有连续的点连在一起以及每个部分的位数及数值是否合法。**#include <stdio.h>#include <string.h>const int maxn = 110;char buf[maxn], buf2[maxn];bool isValidChar(const char *str) {

2015-03-29 22:39:09 994

原创 NYOJ12 喷水装置(二)【贪心】

喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入 第一行输入一个正整数N表示共有n次测试数据。 每一组测试

2015-02-22 14:32:56 959

原创 NYOJ12 喷水装置(二)【贪心】

喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入 第一行输入一个正整数N表示共有n次测试数据。 每一组测试

2015-02-22 14:32:52 1250

转载 VIM入门

vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅,在本教程当中     就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令,而掌握好这     些命令,您就能够很容易将vim当作一个通用的万能编辑器来使用了。     完成本教程的内容大约需要25-30分钟,取决于您训练的时间。     每一节的命令操作将会更改本文。推荐您复制本文的一个副本,然后在副本上

2015-02-08 17:35:16 664

原创 POJ1050 To the Max

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl B 斜体 Ctrl I 引用 Ctrl

2015-02-07 23:12:50 927

原创 HDU2607 Let the Balloon Rise II

Let the Balloon Rise IITime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 131    Accepted Submission(s): 37Problem DescriptionCon

2015-02-03 14:56:18 1249

原创 HDU1728 逃离迷宫 【BFS】

逃离迷宫Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16840    Accepted Submission(s): 4108Problem Description  给定一个m × n (m行, n列)

2015-02-01 19:18:27 1049

原创 HDU1978 How many ways 【DP】

How many waysTime Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3268    Accepted Submission(s): 1930Problem Description这是一个简单的生存游戏,

2015-01-27 18:49:41 1118 1

原创 HDU2159 FATE 【二维完全背包】

FATETime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8302    Accepted Submission(s): 3884Problem Description最近xhd正在玩一款叫做FATE的游戏,为

2015-01-27 17:20:05 869

原创 HDU2571 命运 【DP】

命运Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10758    Accepted Submission(s): 3793Problem Description穿过幽谷意味着离大魔王lemon已经无限接近

2015-01-27 16:39:36 1022

原创 HDU2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 【多重背包】

Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1 Output对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。 Sample Input18 22 100 44 100 2 Sample Output4

2015-01-27 15:06:42 926

原创 HDU1172 猜数字 【暴力】

猜数字Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2960    Accepted Submission(s): 1728Problem Description猜数字游戏是gameboy最喜欢的游

2015-01-27 11:35:53 1136

原创 HDU2589 正方形划分 【DFS】

正方形划分Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 179    Accepted Submission(s): 87Problem Description一个边长为L的正方形可以分成 L*L个小正方形

2015-01-26 21:38:09 1232

C语言学生信息管理系统

这个是C语言结课设计,学生信息管理系统,代码500多行,支持文件读写。

2014-06-28

Java7官方参考文档

这个是在官网下载的Java7参考文档包括API参考等

2014-03-23

Thinking in Java pdf 免积分 英文 非扫描版

Thinking in Java pdf 英文 非扫描版 免积分下载

2014-02-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除