五月花

时间在哪里,成就就在哪里!

返回给定值在有序数组中的插入位置

注意,数组中的数值可能有重复。 题目描述:给定一非降序数组,数值可能有重复。再给定一值key,请返回第一个大于key的数组元素的下标。如果没有,则返回数组的长度. int binary_search(int* array, int length, int key) { if(array[le...

2016-02-27 17:46:50

阅读数 824

评论数 0

【剑指offer】复杂链表的复制

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomL...

2016-01-08 14:51:53

阅读数 473

评论数 0

逆序数的三种求法

逆序数:一个数列nums[N],对任意两个数,如果前面的数大于后面的数,那么就称它们为一对逆序数。 我们用一个数组存储逆序数的值,Reverse[i]表示nums[i]之后且比nums[i]小的数。 下面我们用三种方法(第一种方法没有实际意义)来求Reverse数组。 1. 完全暴力计数法 先将R...

2015-12-19 17:56:15

阅读数 3614

评论数 0

树状数组(Binary Indexed Tree)

树状数组(Binary Indexed Tree),又叫做Fenwick Tree,它能够高效地获取数组中连续N个数的和。 传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(N)。树状数组通过将线性结构转换成逻辑上的树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳...

2015-12-18 11:34:53

阅读数 924

评论数 0

【leetcode】318. Maximum Product of Word Lengths

Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the two words do not share common letters. You may as...

2015-12-17 20:55:31

阅读数 1390

评论数 0

【剑指offer】二叉搜索树的后序遍历序列

一看到后序遍历,就要反应出来:从后向前遍历数组,我可以找到该二叉树每棵子树的根。 其实,这道题前序和后序遍历,解题方法是完全一样的,因为只要该遍历中包含了根的信息,就可以按照BST树的定义来检查。 所以,中序遍历不行。因为中序遍历不显含根的位置信息。 这样,检验该二叉树是否是BST,就可以根据定义...

2015-12-15 18:03:48

阅读数 605

评论数 0

二叉树的层次遍历+每一层单行输出

给定一棵二叉树,要求按层次遍历该二叉树,每一层将单独输出一行。 难点就在于每一层的结点输出一行。 本着鄙视递归的潜意识,先用迭代来做,递归的做法放在最后。 类似于广度优先遍历,故采用队列 做为辅助记忆结构。 /* struct TreeNode { int val; struct Tre...

2015-12-15 16:06:47

阅读数 9153

评论数 1

【剑指offer】二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。  举例: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 ...

2015-12-15 14:24:21

阅读数 416

评论数 0

【证明】加减法交换两个整数,过程可能会溢出,但结果依然正确

请对下面的代码做出判断: void swap_int(int *a,int *b) { if(a == b) return; *a=*a+*b; *b=*a-*b; *a=*a-*b; } 以下说法正确的是: A.结果不正确,因为会溢出,用位与的方式就没问题 B.结果正确,即使...

2015-12-15 10:55:50

阅读数 1184

评论数 0

分解正整数的质因数

首先,由 算术基本定理可知,任何一个大于1的正整数,都可以分解成若干个质数的乘积,并且这种乘积的形式是唯一的。 所以,对于整数分解,如果先从最小的质数n=2开始进行分解,如果能整除,就只取商,直到不能除时,n++,然后判断n是否大于现在的商。如果大于,结束程序。否则继续循环。 核心代码很短,只有1...

2015-12-14 12:59:04

阅读数 821

评论数 0

【剑指offer】替换空格(把一个空格替换为三个字符)

题目很简单,book备忘一下。 显然,把一个空格替换为三个字符,替换后原字符串要变长。本题,题目保证原字符串空间可以容纳变长后的字符串。 因为替换后变长,所以如果从前往后扫描的话,替换后,会覆盖之后原有的字符。所以采用从后向前来替换。 第一遍,从前向后扫描一次,获取有多少个空格以及原字符串的总长度...

2015-12-13 15:32:56

阅读数 972

评论数 0

【leetcode】4. Median of Two Sorted Arrays

题目如下: 已知两个已从小到大排序的数组nums1[M]和 nums2[N],返回两个数组中所有数字从小到大排序后的中位数。两个数组中可能均有重复的数字。 时间复杂度不允许超过log(N+M). 分析: 看到已排序的、可随机访问的数组,肯定用二分查找。 估计还是有人不知道中位数是什么。中位数就是:...

2015-12-13 13:06:57

阅读数 358

评论数 0

插入、删除、修改操作 代价不等的 最短编辑距离 动态规化求法

直接上干货。 什么叫编辑距离?从字符串str1到字符串str2需要经过多少次编辑。每次编辑只能增加 / 删除 / 替换1个字符。计算出从str1到str2最小的编辑距离(Minimum Edit Distance),用此可作为两个字符串之间的相似度的衡量。 定义符号: 对于两个字符串st...

2015-12-11 15:25:33

阅读数 814

评论数 0

数据流中所有数排序之后的中位数

先来讲一下STL中make_heap   push_heap   pop_heap这三个模板函数的用法。 template void make_heap (RandomAccessIterator first, RandomAccessIterator last); template ...

2015-12-10 21:31:51

阅读数 542

评论数 0

最长公共子序列LCS 与最长公共子串 两个问题的动态规化 解法

一、最长公共子序列 最长公共子序列的问题常用于解决字符串的相似度。 最长公共子序列全称为Longest Common Sequence,LCS,注意与最长公共子串的区别。序列可以不连续,子串一定是连续的。 下面我们先讨论子序列(不连续)。 对于两个字符串str1, str2,它俩的长度分别...

2015-12-09 22:51:36

阅读数 445

评论数 0

【编程之法习题】第一章 字符串

2015-12-08 17:12:07

阅读数 458

评论数 0

【leetcode】3. Longest Substring Without Repeating Characters 三种方法

查找给定字符串的最长不重复子串。 方法一:该方法很直接,依次从每一个字符开始,向后逐个遍历,直到遇到重复的字符为止。判断字符是否重复,用到了hash数组,可以在常数时间内判断当前字符在本次循环中是否访问过,由于针对的是ASCII字符集,故使用的hash数组大小为256. int lengthOf...

2015-12-07 22:51:29

阅读数 356

评论数 0

【leetcode】5.Longest Palindromic Substring >>Manacher算法

求指定字符串的最长回文子串。 给定 std::string Str,采用manacher算法,在O(n)时间内,在O(n)空间下,解决该问题。 字符串包括奇数长的和偶数长,同时其中所含的回文串也分奇数长和偶数长,如果分情况讨论的话,比较复杂。manacher想出了一个方法,可以统一各种情况。 m...

2015-12-07 17:06:40

阅读数 437

评论数 0

【后缀数组系列】二、后缀数组的两种求法

待续。。。

2015-12-06 17:54:29

阅读数 453

评论数 0

【后缀数组系列】一、基本概念

如果你没有听说过后缀数组,那么我敢肯定,你确实没怎么处理过字符串相关的算法问题。 ————题记 对于解决字符串相关的问题,后缀数组是一把利器。它经常被用来解决字符串相关的各种复杂问题。下面开始介绍后缀数组。 后缀数组 int SA[N] 从后缀字符串开始。对于字符串S[9] = "a...

2015-12-06 16:11:45

阅读数 380

评论数 0

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