算法
文章平均质量分 65
WangMark
这个作者很懒,什么都没留下…
展开
-
Base64的编码和解码
为什么要使用Base64?在设计这个编码的时候,我想设计人员最主要考虑了3个问题:1.是否加密? 2.加密算法复杂程度和效率 3.如何处理传输? 加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”。即达到一眼望去完全看不出内容即可。基于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于转载 2014-08-19 17:40:56 · 3253 阅读 · 0 评论 -
[每日练习]百度算法面试题
问题描述:一个字符串,求其不出现重复字符的子字符串的最大长度如“abcabcbb”最大的就是“abc”长度3“aaaaaa”最大就是“a”长度1解题思路:用一个bitmap数组作为某个字符是否出现的标志位。如果某个字符没有出现过,就将相应的bitmap位置设置为该字符在字符串中的索引。如果字符已经出现,则说明从起始点到现在字符的前一个字符是当前的最大substrin原创 2014-12-05 10:50:51 · 1090 阅读 · 0 评论 -
[每日练习]Amazon面试题:数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间
问题描述:数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间the code:#include #include //数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间。 static void FindTwoMissedElements(int *arr原创 2014-12-05 13:42:25 · 1191 阅读 · 0 评论 -
[每日练习]最大公约数问题
/* 最大公约数问题 描述:对于给定正整数x,y,求它们的最大公约数d,并且求出参数a, b使得ax+by=d。*/#include static int gcd(int x, int y, int *a, int *b){ int q = x/y; int r = x%y; int d, a1, b1; if(r == 0) { *a原创 2014-11-26 16:49:57 · 555 阅读 · 0 评论 -
[每日练习]堆排序
#include #include#includevoid swap(int *a, int i, int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp;}void BubbleSort(int *a, int size){ int j, len = size-1;原创 2014-10-16 13:30:32 · 424 阅读 · 0 评论 -
[每日练习]百度算法面试题
有20个数组,每个数组里面有500个数组,降序排列,每个数字是32位的unit,求出这10000个数字中最大的500个。以下 n=10000,m=500,有三个方法。 [1] sort. O(nlogn) [2] 将第一数组建立 min-heap,所有其他数组成员依次插入到 min-heap,每次完成插入后,删除当前最小值,即根元素。所有元素都筛过以后,min-heap 中原创 2014-10-16 13:32:09 · 488 阅读 · 0 评论 -
[每日练习]三种冒泡排序方法
#include #include #include "../util/util.h"/*设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。*/voi原创 2014-10-16 13:22:09 · 458 阅读 · 0 评论 -
[每日练习]面试题--判断某个字符串是否为另一个字符串旋转得到的(Java)
public class SearchRotateStr { static Boolean SearchIfRotateStr(String str1, String str2) { if(str1 == null || str2 == null) return false; if(str1.length() != str2.length()) retur原创 2014-09-25 13:50:32 · 579 阅读 · 0 评论 -
[每日练习]面试题--某个短字符串中的字符是否包含在长串中
问题描述:给出一个长串和短串,都是由普通字符组成的原创 2014-09-25 11:05:01 · 1327 阅读 · 0 评论 -
[每日练习]数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间
问题描述:数组有N+M个数字, 数字的范围为1 ... N, 打印重复的元素, 要求O(M + N), 不可以用额外的空间。解决思路:遍历数组,将数值为x(范围是1...N)的元素放到x-1的位置,如果x-1的位置已经存在数值为x的元素,则说明x是重复元素,打印。如果x-1位置的数值不为x,则交换两个元素。the code:// 打印重复的元素_要求O(M + N)原创 2014-12-05 10:21:06 · 1785 阅读 · 0 评论 -
[每日练习]一个数组中有一个数字只出现一次,其他数字都出现了偶数次。请找出一个只出现一次的数字
#include /*原题描述:一个数组中有一个数字只出现一次,其他数字都出现了偶数次。请找出一个只出现一次的数字?解题思路:将数组中所有的元素异或,最终的元素就是只出现一次的数字*/static int FindOneNum(int arr[], int length) { int i, num=0; for(i=0; i num ^= a原创 2014-12-05 14:04:30 · 965 阅读 · 0 评论 -
遍历序列唯一确定二叉树的问题
理论证明:http://blog.sina.com.cn/s/blog_a49d9ef801014b7u.html实例说明:http://blog.csdn.net/chaoyue1216/article/details/7609689转载 2017-01-24 20:07:08 · 1681 阅读 · 0 评论 -
Lowest Common Ancestor of a Binary Tree
http://articles.leetcode.com/lowest-common-ancestor-of-a-binary-tree-part-ihttp://articles.leetcode.com/lowest-common-ancestor-of-a-binary-tree-part-ii转载 2017-01-24 18:07:19 · 177 阅读 · 0 评论 -
Print binary tree
#include #include #define ARRAY_SIZE (63)#define NODE_DISTANCE (4)#define PRINT_OFFSET (2)typedef enum _CHILD_DIRECTION{ LEFT_CHILD = 1, RIGHT_CHILD, NOT_CHILD,}CHILD_DIRECTION原创 2017-01-23 16:53:06 · 304 阅读 · 0 评论 -
Un-sorted list, find the "k" largest value, the original list can be changed
#include int find_k_largest_number(int *arr, int size, int k){ int pivot = arr[0], i=0, j=size-1, m; if (k > size) return -1; // not found#if 0printf("before sort, size = %d, k = %d\n", size,原创 2017-01-20 11:59:39 · 265 阅读 · 0 评论 -
[每日练习] write a function to find the key in a m*n matrix, where each line and column is incremental
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:从二维数组的右上角的元素开始判断,因为此元素是它所在行的最大数,是它所在的列的最小数。如果它等于要查找的数字,则查找过程结束。如果它大于要查找的数字,则可以排除它所在的列。如果它小于要查找的数字,则可排除它所在原创 2017-01-20 11:00:33 · 344 阅读 · 0 评论 -
[每日练习]最大公约数问题的推倒
最大公约数问题 描述:对于给定正整数x,y,求它们的最大公约数d,并且求出参数a, b使得ax+by=d辗转相除法最大公约数的编程求解一般采用辗转相除法,具体如下:1.取x,y中的较大者,这里假设x>y。2.用x对y取模(即mod运算),x % y = d.3.如果d==0,则最大公约数为y;如果d!=0,则令x=y,y=d,继续第二步。对于等式ax+b原创 2015-02-16 15:15:59 · 704 阅读 · 0 评论 -
[每日练习]Amazon面试题---给定数组,求出运算符使得结果等于某个数
Question:Given an array with positive integers and another integer for example{7 2 4} 9, you are required to generate an equation, by inserting operator add ("+") and minus ("-") among the array原创 2014-12-05 10:18:41 · 467 阅读 · 0 评论 -
[每日练习]面试题--将一个有序数组转化为二叉排序树
解题思路:1. 取有序数组的中间节点,作为二叉树的 节点原创 2014-09-25 10:52:56 · 699 阅读 · 0 评论 -
[每日练习]面试题--判断某个字符串是否为另一个字符串旋转得到的
#include #include #include static int FindRotateStr(const char *str1,const char *str2){ int len, i; char *DoubleStr, *p; if(str1 == NULL || str2 == NULL) return 0; if(strlen(str1) !原创 2014-09-25 11:12:11 · 488 阅读 · 0 评论 -
堆排序
堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i转载 2014-08-14 15:40:11 · 360 阅读 · 0 评论 -
单链表反转singlelist reverse
单链表有下面几种基本方法 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用三个指针遍历单链表,逐个链接点进行反转。 方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法1的问题是浪费空间。方法2和方法3效率相当。一般方法2较为常用。原创 2014-08-12 17:21:19 · 525 阅读 · 0 评论 -
[每日练习]如何使用一个指针来实现双向链表操作
#include #include typedef struct _DoubleLinkList { size_t p; int value;}DoubleLinkList;#define NextNode(prev,curr) (DoubleLinkList *)((size_t)prev ^ curr->p)#define PrevNode(curr,next) (原创 2014-09-19 16:44:45 · 753 阅读 · 0 评论 -
[每日练习]C编程实现句子中的单词反转
#include #include static void StrReverse(char *b, char *e){ char c; while(b { c = *b; *b = *e; *e = c; b++; e--; }}static原创 2014-09-19 12:05:21 · 665 阅读 · 0 评论 -
RS及FEC区别及联系
数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续、出现马赛克等现象。所以通过信道编码这一环节,对数码流进行相应的处理,使系统具有一定的纠错能力和抗干扰能力,可极大地避免码流传送中误码的发生。误码的处理技术有纠错、交织、线性内插等。 提高数据传输效率,降低误码率是信道编码的任务。信道编码的本质是增加通信的可靠性。但信道编码会使有用的信息数据传转载 2014-08-08 16:23:17 · 15923 阅读 · 0 评论 -
CRC16 三种算法及c实现
标准CRC生成多项式如下表: 名称 生成多项式 简记式* 标准引用 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 0x31 CRC-8 x8+x转载 2014-08-08 15:37:52 · 1479 阅读 · 0 评论 -
[每日练习]C编程实现二叉树
#include #include typedef struct _Btree { int value; struct _Btree *left; struct _Btree *right;} Btree;void Btree_insert(Btree **node, int value){ Btree *b = *node;原创 2014-09-18 17:41:43 · 557 阅读 · 0 评论 -
排序算法总结
内部排序技术 http://routeadd-net202.114.6.yulei.blog.chinaunix.net/uid-25324849-id-2182899.html转载 2014-08-20 10:27:27 · 362 阅读 · 0 评论 -
二分查找
二分查找算法基本思想二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.用伪代码来表示, 二分查找算法大致是这个样子的:转载 2014-08-15 11:29:56 · 676 阅读 · 0 评论 -
[每日练习]随机洗牌算法(简单交换)
方法描述:1。随机产生一个1-n的数x,然后让第x张牌和第1张牌互相调换。2。随机产生一个1-n的数y,然后让第y张牌和第2张牌互相调换。3。随机产生一个1-n的数z,然后让第z张牌和第i张牌互相调换。(i=3,4,5...54)这种算法的复杂度为O(N)。 #include #include #include static void Shuffle(int a原创 2014-09-22 18:53:55 · 488 阅读 · 0 评论 -
[每日练习]十进制数转换为n进制数
static char *Dec2N(int num, int n){ static char hexBuf[sizeof(int)*8+1]; unsigned int c; int i = 0; char *begin, *end, tmp; while (num!=0) { c = num%n; hexBuf[i++] = c>9?c+'a'-1原创 2014-09-15 10:17:41 · 589 阅读 · 0 评论 -
[每日练习]编程实现两个正整数的除法
#include #define INT_MAX (0xffffffff)static int IntegerDivide(const int x, const int y){ unsigned int multi; int result = 0; unsigned int left_num, right_num; if(y == 0) return INT原创 2014-09-15 12:44:59 · 729 阅读 · 0 评论 -
数据结构之--图
图之基础http://routeadd-net202.114.6.yulei.blog.chinaunix.net/uid-25324849-id-2182918.html转载 2014-08-19 17:09:44 · 403 阅读 · 0 评论 -
数据结构之--树
数据结构之哈夫曼树 http://routeadd-net202.114.6.yulei.blog.chinaunix.net/uid-25324849-id-2182845.html转载 2014-08-19 17:18:11 · 394 阅读 · 0 评论 -
大数据量的算法
作者:July、youwang、yanxionglu。时间:二零一一年三月二十六日说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。有任何问题,欢迎交流、指正。出处:http://blog.csdn.net/v_JULY_v。第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个I转载 2014-08-17 13:32:37 · 421 阅读 · 0 评论 -
稳定排序和不稳定排序
这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的转载 2014-08-17 13:28:20 · 562 阅读 · 0 评论 -
[每日练习]随机洗牌算法(Java)
import java.util.ArrayList;import java.util.Random;public class ShuffleTest { static final int NUM = 54; static void ShuffleFunction(ArrayList list) { Random r = new Random(); ArrayLi原创 2014-09-23 14:30:54 · 838 阅读 · 0 评论 -
交换两个数组值使两个数组之差最小
要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];假设序列a,b中元素的和为sum_a和sum_b。假设aa和bb分别为序列a,b中的元素,则交换aa,bb后序列的和变为sum_a-aa+bb,sum_b+aa-bb;两序列的差为(sum_转载 2014-08-29 14:01:15 · 790 阅读 · 0 评论 -
Find first set
https://en.wikipedia.org/wiki/Find_first_set#CLZ转载 2017-05-27 13:55:41 · 417 阅读 · 0 评论