
算法
悟空很开心
幸福来敲门
展开
-
值得推荐的C/C++框架和库 (真的很强大)
http://blog.youkuaiyun.com/xiaoxiaoyeyaya/article/details/42541419转载 2016-01-03 09:58:51 · 517 阅读 · 0 评论 -
算法题:两颗砖石谁轻谁重?
昨天可爱的师妹拿来的一道题,题目如下:小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间后,它们看中了两颗钻石g1和g2。现在请你根据之前比较的信息判断这两颗钻石的哪颗更重。给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。原创 2016-04-19 21:43:49 · 1659 阅读 · 0 评论 -
剑指Offer:数值的整数次方
bool g_InvalidInput = false;//注意double float等类型的相等比较bool equal(double num1, double num2) { if ((num1 - num2) > -0.000001 && (num1 - num2) < 0.000001) { return true; } else原创 2016-05-14 15:38:29 · 307 阅读 · 0 评论 -
剑指Offer:打印1到最大的N位数
bool Increment(char* number) { bool isOverflow = false; int nTakeOver = 0; int nLength = strlen(number); for (int i = nLength - 1;i >= 0;i--) { int nSum = number[i] - '0' + nTak原创 2016-05-16 14:31:09 · 350 阅读 · 0 评论 -
二叉树的三种遍历六种实现
#include <iostream> #include <stack>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), rig原创 2016-08-02 16:50:59 · 1460 阅读 · 0 评论 -
常见排序算法总结-C++实现
#include <iostream>using namespace std; int arr[] = {2,3,1,5,4,6,8,7,9,10};void print(int *arr,int len){ for(int i=0;i<len;i++){ cout<<arr[i]<<" "; } cout<<endl;} //冒泡-升序排列 void原创 2016-08-06 11:10:34 · 376 阅读 · 0 评论 -
字符串类型题目
#pragma once#include <string>#include <vector>#include <stack>using namespace std;class newcoder_string {public: /************************************************************************/ /原创 2016-08-10 18:32:13 · 370 阅读 · 0 评论 -
剑指Offer :寻找链表中倒数第K个节点
struct ListNode{ int val; ListNode* next;};//寻找倒数第K个节点ListNode* FindKthToTail(ListNode* pListHead,unsigned int k){ if(pListHead == NULL || K <= 0){ return NULL; } ListNode原创 2016-08-25 11:28:22 · 330 阅读 · 0 评论 -
剑指Offer:调整数组中的数据
题目是:输入一个整数数组,实现一个函数来调整数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组后半部分。bool isEven(int n){ return (n & 1) == 0; }void Reorder(int *pData,unsigned int length,bool (*func)(int)){ if(pData == NULL || lengt原创 2016-08-25 11:32:50 · 334 阅读 · 0 评论 -
归并排序(c++实现)
#include <iostream> using namespace std; template <class T> void MSort(T a[], int left, int right) { if (left < right) { int center = (left + right) / 2;//取得中点原创 2016-08-25 19:14:29 · 376 阅读 · 0 评论 -
排序算法之二:冒泡、插入、希尔、快排、归并
还是打击太深,面的太水,不然,也不会把这些老黄历再扒出来…. 希望多写写能够增加熟练度~~#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;//交换void swap(int* arr, int x, int y) { int tmp = arr[x]; arr[x] =原创 2016-04-15 21:32:03 · 403 阅读 · 0 评论 -
剑指Offer:二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6原创 2016-09-06 16:55:26 · 501 阅读 · 0 评论 -
剑指Offer:顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5 6, 7, 11, 10. i原创 2016-09-06 16:58:37 · 394 阅读 · 0 评论 -
memcpy()和memmove()
1、实现memcpy函数 已知memcpy的函数为: void* memcpy(void* dest , const void* src , size_t count)其中dest是目的指针,src是源指针。不调用c++/c的memcpy库函数,请编写memcpy。 分析:参考代码如下:void* memcpy(void *dst, const void *src, size_t count)原创 2016-08-27 09:35:30 · 538 阅读 · 0 评论 -
剑指Offer:数字出栈入栈
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)bool is_pop_order(vector<int>& pushV,vector<int>原创 2016-09-06 18:55:48 · 508 阅读 · 0 评论 -
剑指Offer:二进制数位相关运算
二进制数的位运算其实不多,包括与、或、异或、左移、右移等。 现在砍一刀题目: 输入一个整数,输出该数二进制表示中1的个数 首先,我们应该想到的是循环移位然后做与运算。不妨称这个为思路一吧: 代码如下:int numberOf1(int n) { int count = 0; unsigned int flag = 1; while (flag) { i原创 2016-05-14 14:28:01 · 376 阅读 · 0 评论 -
剑指Offer:递归问题
递归解法往往有简洁易懂的优点,但是也有一些缺点:每一次函数调用,都需要在内存栈中分配空间保存参数、返回地址、以及临时变量,而且往栈里压入数据和弹出数据都需要时间其次,递归中更有很多计算是重复的,从而对性能带来很大的负面影响。其本质无非是把一个问题分解成两个或者多个小问题,如果多个小问题存在相互重叠的部分,那么就存在重复的计算。最明显的例子是我们教科书中的斐波那契数列递归解法了,代码如下:long原创 2016-05-14 11:54:59 · 345 阅读 · 0 评论 -
剑指Offer:旋转数组的最小数字
/************************************************************************//* 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序数组的旋转,输出旋转数组的最小元素。 例子: 数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的原创 2016-05-14 11:08:03 · 308 阅读 · 0 评论 -
最短路径Dijkstra算法和Floyd算法
Dijkstra算法定义概览 Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法没在很多专业课程中都有详细的内容介绍,如数据结构、图论、运筹学等等。值得注意的是算法要求图中不存在负权边。 问题描述:在无向图G =(V,E)中,假设每条边E[i]的长度转载 2016-03-19 13:02:21 · 519 阅读 · 0 评论 -
遍历二叉树
废话不多说,直接代码~~ 先来一个二叉链表结点结构定义:typedef struct BiTNode /*结点结构*/{ int data; //结点数据 struct BiTNode,*lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree;前序遍历//二叉树的前序遍历递归算法void PreOrderTRaverse(Bi原创 2016-04-12 08:48:58 · 364 阅读 · 0 评论 -
字符串之一:匹配相关
题目很简单,有两个字符串A,B,如果B在A中,输出在A中起始地位置。 我们这里先用穷举法:int index(const string& A,const string& B){ if(A.empty() || B.empty()) return -1; int len_a = A.length(); int len_b = B.length(); i原创 2016-04-15 20:48:22 · 293 阅读 · 0 评论 -
汉诺塔问题递归解法
汉诺塔问题是使用递归解决问题的经典范例。 汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动原创 2016-04-15 21:17:45 · 687 阅读 · 0 评论 -
排序算法之一:冒泡排序和插入排序
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-10-22 20:00:52 · 523 阅读 · 0 评论 -
统计一个数中1的个数
题目是统计一个数字中1的个数(ps:机器中的二进制存储)~~//统计一个数中1的个数int numberOf1(int n){ int count = 0; unsigned int flag = 1; while (flag) { if (n&&flag) { count++; } flag << 1原创 2016-04-15 21:36:51 · 728 阅读 · 0 评论 -
算法:替换字符串中的空格
那种O(N^2)的算法就不说了,说一下O(N)的~~ Talk is cheap,show you the code~~#include <iostream>using namespace std;/************************************************************************//* We are happy--> We%20原创 2016-05-11 14:57:18 · 331 阅读 · 0 评论 -
链表的基本操作
记录一下基本的链表操作,主要是增加和删除~~ Code。。。。。struct ListNode { int m_nValue; ListNode* m_pNext;};void AddToTail(ListNode** pHead, int value) { ListNode* pNew = new ListNode(); pNew->m_nValue = v原创 2016-05-11 15:51:15 · 337 阅读 · 0 评论 -
查找之一:顺序表查找
这里的查找从先行查找开始,key为一个整数,也可以自定义为任何数据结构。另外,我们这里使用的数组第一位(arr[0])不用来存储数据,而是用来存储key,当然也可以存其他的东西,比如这个数组的长度等等。第二种方法里面会用到这一点,效率上会有所提升。简单实现一://顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字int seq_search(int *a,int n,int ke原创 2016-04-17 15:59:16 · 466 阅读 · 0 评论 -
查找之二:二叉排序树
先说一下定义(尽管大家后知道…………)~!~ 二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一颗空树,或者是具有以下性质的二叉树:若它的左子树不空,则左子树上所有结点的均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的均大于它的根结点的值;它的左右子树也分别为二叉排序树。其实,上面使用了递归定义,是不是也暗示着我们的查找程序也将使用递归呢?看看下面的代原创 2016-04-17 21:29:25 · 451 阅读 · 0 评论 -
再谈二叉树:三种遍历六种实现
二叉树的遍历:前序、中序’后序,其实,是以根节点的访问顺序来确定的,具体看下面://记法:根节点的遍历顺序就是树的遍历顺序 /************************************************************************/ // V --访问根节点 // L --遍历左子树 // R -- 遍历右子树 // V原创 2016-05-13 11:39:39 · 463 阅读 · 0 评论 -
再谈二叉树:重建二叉树
题目是这样的:给出二叉树的前序遍历和后序遍历结果,存储在整型数组中。据此构建出该二叉树。 思路分析:主要考虑到遍历的特点,可以[参考之前的一篇博客]。(http://blog.youkuaiyun.com/xjtuse2014/article/details/51394002)我们可以根据前序遍历结果找到根节点,也就是前序遍历结果的第一个元素,然后在中序遍历结果中找到根节点,那么根节点的左边的元素就是左子树,原创 2016-05-13 12:37:01 · 321 阅读 · 0 评论 -
回首栈与队列
题目如下:分别用两个队列实现一个栈、两个栈实现一个队列。 不喜欢啰嗦了,直接上代码:/************************************************************************//* 用两个stack模拟queue*//********************************************************原创 2016-05-13 13:58:41 · 256 阅读 · 0 评论 -
快速排序
有一篇很不错的关于快苏排序的博文,链接:http://developer.51cto.com/art/201403/430986.htm 下面,只是把代码贴上来:#include <stdio.h> int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left,int right) { int i,j,t,temp;原创 2016-05-13 15:21:08 · 295 阅读 · 0 评论 -
查找之三:二叉排序树(续)
上一篇关于二叉排序树的博客中,没有提到怎么删除一个节点,实际上,这也是BST(Binary Sort Tree)中稍微比较难一点的操作,但是,仔细分析的话,也很是很好理解的~~原创 2016-04-18 20:55:02 · 373 阅读 · 0 评论 -
一些问题
TCP连接的状态与关闭方式及其对Server与Client的影响 http://www.cnblogs.com/jarvise/p/4690277.html转载 2017-10-28 15:06:01 · 267 阅读 · 0 评论