算法
长风Qiu
A Linux C++ Programmer.
展开
-
LintCode.391.数飞机
好久没有写博客。还有一个小时就从深圳回家过年,闲着没事就去LintCode随机找了道题练练手。题目描述:给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?(如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。)样例:对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]], 返回3。分析这道题目挺...原创 2018-02-13 17:10:00 · 387 阅读 · 2 评论 -
[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 · 214 阅读 · 0 评论 -
全排列
可以使用并发的方式来跑。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 · 245 阅读 · 0 评论 -
[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 · 326 阅读 · 0 评论 -
字典树的实现
字典树又称为前缀树或Trie树,是处理字符串的常见数据结构。本实现提供了以下四个主要功能。1.bool Insert(const string&amp;amp; word) 添加word,可重复添加2.bool Delete(const string&amp;amp; word) 删除word,如果word添加过多次,仅删除一个3.bool Search(const string&amp;amp; word) 查询...原创 2018-06-02 11:43:56 · 347 阅读 · 0 评论 -
字符串转整数atoi
字符串转整数很容易把代码写得难看。下面这段代码算是难得的优雅了,精妙的地方在于使用负数存储中间值,避免了过多的边界检查,而且将遍历单独抽了出来,虽然多了次遍历,但是代码因此变得整洁,是个划算的权衡。 bool IsValid(const char *str, int len) { if (str == NULL || *str == '\0') ...原创 2018-05-25 09:01:11 · 298 阅读 · 0 评论 -
寻找二叉树的最大搜索子树
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 · 444 阅读 · 0 评论 -
二叉树的三种非递归遍历方式
#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 · 296 阅读 · 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 · 339 阅读 · 0 评论 -
LintCode.360.滑动窗口的中位数
/** LintCode.360.滑动窗口的中位数 * 题目: * 给定一个包含 n 个整数的数组,和一个大小为 k 的滑动窗口,从左到右在数组中滑动这个窗口, * 找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字。) * 样例: * 对于数组 [1,2,7,8,5], 滑动大小 k = 3 的窗口时,返回 [...原创 2018-02-21 21:32:45 · 592 阅读 · 0 评论 -
Haskell实现快排
使用haskell实现的快排代码真的是相当简洁,直观,很有美感。相对于C系列语言来说,haskell写算法的时候更关注算法本身是什么样子而不是怎么去实现这个算法,这点真的很棒。quicksort :: (Ord a) => [a] -> [a]quicksort [] = []quicksort (x:xs) = let smallPart = quicksort [a ...原创 2019-07-07 21:37:07 · 1173 阅读 · 0 评论