自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Nick

亘古而常青的昨天永远是过去,也永远会再来。

  • 博客(35)
  • 收藏
  • 关注

原创 04.重建二叉树

1.思路: 首先确定可以采用递归的求解方式,其次观察递归函数的输入变量为两个vector< int >,确定递归形式中一定要存放两个vector< int >,观察前序遍历和中序遍历中根节点、根左边结点、根右边节点它们存在的规律,分别将其存入pre_left, pre_right, mid_left, mid_right的vector中,再进行递归调用。2.代码/** * Definition

2017-12-30 23:13:00 209

转载 python中的try/except/else/finally语句

与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(python作为脚本语言没有编译的环节,在执行过程中对语法进行检测,出错后发出异常消息)、数据除零错误、从未定义的变量上取值等;而try/finally语句则主要用于在无论是否发生异常情况,都需要执行一些清理工作的场合,如在通信过程中,无论通信是否发生错误,都需要在通信完成或者发

2017-12-29 11:21:30 6416

转载 关于Python中的引用

转载地址:[这里写链接内容](http://www.cnblogs.com/yuyan/archive/2012/04/21/2461673.html) 作为一个python初学者,今天被一个python列表和词典引用的问题折磨了很久,但其实了解了缘由也很简单,记录在此备忘。首先背书python中的引用对象问题:1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的

2017-12-28 16:36:25 2386

原创 03.从尾到头打印链表

代码一:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: int printk

2017-12-27 17:19:40 173

转载 Softmax函数与交叉熵

Softmax函数背景与定义在Logistic regression二分类问题中,我们可以使用sigmoid函数将输入映射到区间中,从而得到属于某个类别的概率。将这个问题进行泛化,推广到多分类问题中,我们可以使用softmax函数,对输出的值归一化为概率值。这里假设在进入softmax函数之前,已经有模型输出值,其中是要预测的类别数,模型可以是全连接网络的输出,其输出个数为,即输出为。所以对每个样本

2017-12-25 11:55:26 1342

原创 02.替换空格

1.思路: 1>重新定义一个新的数组,并进行赋值 2>确定变换后数组的长度,再从后往前更新数组,记得在最开始要先加’\0’2.代码: 方案一:class Solution {public: void replaceSpace(char *str,int length) { char* tmp = (char*)malloc(sizeof(char) * length)

2017-12-23 17:56:51 171

原创 01.二维数组中的查找

1.思路 直接从右上角向左下角遍历。2.程序#include<iostream>#include<vector>using namespace std;class Solution {public: bool Find(int target, vector<vector<int> > array) { int m = array.size(), n = array[0

2017-12-21 12:42:50 239

原创 快速排序(python)

代码:def median(nums): nums = quicks(nums) if len(nums) % 2 != 0: return nums[len(nums) / 2] else: return (nums[len(nums) / 2] + nums[len(nums) / 2 - 1]) * 1.0 / 2def quicksort(nums, left,

2017-12-19 22:13:30 300

原创 Battleship!

1.说明:python实现一个打海盗船的程序,对python的if语句list结构进行一个小综合2.代码from random import randintboard = []for x in range(5): board.append(["O"] * 5)def print_board(board): for row in board: print " ".join(row)pr

2017-12-19 17:25:50 584

原创 二叉树的遍历

1.思路 先序遍历:遍历顺序 root、leftchild、rightchild 中序遍历:遍历顺序leftchild、root、rightchild 后序遍历:遍历顺序leftchild、rightchild、root“先中后”指的是根结点root在遍历顺序中的相对位置。程序中分别用递归与非递归方法实现,递归方法较为简单,非递归方法采用堆栈stack进行辅助操作。2.代码#include<i

2017-12-15 15:15:23 242

原创 双向循环链表

1.思路 在双向链表的基础上,让末结点的next指向表头结点,表头结点的pre指向末结点。2.代码#include<iostream>using namespace std;struct node { int data; node* pPre; node* pNext;};node* creat() { node* pHead = (node*)malloc(s

2017-12-14 16:09:09 219

原创 双向链表

1.思路 在单链表的基础上,node的结构体里多了一个指向前一个结点的指针node* pre,其他操作大同小异。2.代码#include<iostream>using namespace std;struct node { int value; node* pre; node* next;};node* creat() { node* list = (node*

2017-12-13 22:39:12 200

原创 队列(数组实现)

1.思路 定义一个特定长度的数组,用head、tail两个指针记录队列内元素的头和尾,进而实现队列的入队出队等基本操作。2.代码#include<iostream>using namespace std;const int N = 10;struct queue { int head; int tail; int len; int *arr;};queue*

2017-12-13 17:58:57 543

原创 队列(链表实现)

1.思路 定义结构体node表示链表里的节点,结构体linklist表示链表,选用两个首尾指针进行基本操作。2.代码#include<iostream>using namespace std;struct node { int value; node *next;};struct linklist { //带头尾指针的链表 node* head; node* t

2017-12-13 11:36:57 468

原创 单链表(结构体与类实现)

1.单链表数据结构,自带sort函数按照从小到大排列,插入数据时,从链表头往后扫,将插入数据放在遇到的第一个比插入data小的数的前一位。2.代码#include<iostream>using namespace std;struct LinkNode {public: LinkNode(int value = 0) { nValue = value; p

2017-12-12 23:09:49 2339

原创 栈(数组实现)

1.思路 定义一个长度为N的数组arr,定义一个int len记录已存入数组的元素个数,入栈len++,出栈len–,len == 0栈空,len == N栈满。 2.代码#include <iostream>using namespace std;struct Stack { int value; struct Stack *next;};Stack* CreateStac

2017-12-11 21:03:24 383

原创 栈(链表实现)

1.思路 节点结构体为:一个int数值,一个指向下一个节点的指针Struct* next。设定一个链表头节点p,每次入栈的节点都放在p点的下一个节点,前面的节点则依次往后推移一位;每次出栈时将p->next对应节点值输出,并将p->next指向p->next->next;当p->next为nullptr则表明栈为空;当p为nullptr,表明栈不存在。 2.代码#include <iostrea

2017-12-11 20:31:05 286

转载 malloc、free用法

malloc用法需要包含头文件:#include ‘stdlib.h’函数声明(函数原型):void *malloc(int size);说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。从函数声明上可以看出。malloc 和 new 至少有两个

2017-12-11 20:08:42 447

转载 二值图细化

程序编码参考经典的细化或者骨架算法文章: T. Y. Zhang and C. Y. Suen, “A fast parallel algorithm for thinning digital patterns,” Comm. ACM, vol. 27, no. 3, pp. 236-239, 1984. 它的原理也很简单:       我们对一副二值图像进行骨架提取,就是删除不需要的轮廓点,

2017-12-11 16:49:17 1087

原创 随机选择第i小元素

1.思路 采用快速排序中的Partition(int *nArr, int nLeft, int nRight)函数,将数组nArr按照与随机选取Key值的大小关系进行排序,检查比key值所处位置nKey(nKey = nTmpPos - nLeft + 1)和i的关系,如果nKey=i,则返回nArr[nKey];如果nKey>i,则调用Select(nArr, nLeft, nTmpPos-

2017-12-11 15:47:20 314

原创 寻找第二小元素

1.思路 一次遍历找到数组中第二小的元素,采用双指针ptr1和ptr2分别指向当前最小和第二小的元素的地址,一次循环,i += 2;数组个数按照奇数偶数进行分类讨论。需要注意指针的使用,避免出现空指针和野指针。 2.代码#include <iostream>#include <vector>#include <ctime>#include <Windows.h>using namespa

2017-12-11 11:16:05 530

原创 桶排序

1.大体思路 桶排序的算法思想:是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的阵列内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到 O(n log n) 下限的影响。 简单来说,就是把数据分组,放在一个个的桶中,然后对每个桶里面的在进行排序。(

2017-12-09 11:36:05 302

原创 计数排序

1.大体思路 计数排序(Counting sort)是一种稳定的线性时间排序算法。计数排序使用一个额外的数组 C ,其中第i个元素是待排序数组 A中值等于 i的元素的个数。然后根据数组 C 来将 A中的元素排到正确的位置。当输入的元素是 n个 0 到 k 之间的整数时,它的运行时间是O (n+k)。计数排序不是比较排序,排序的速度快于任何比较排序算法,属于稳定排序。算法步骤如下: 2.代码#in

2017-12-08 17:08:06 200

原创 基数排序

1.大体思路 基数排序是一种整数排序算法,先写出提取整数每一位数字的子函数,然后从最低位开始(必须是从最低位开始),依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。2.代码#include <iostream>#include <algorithm>#include <ctime>using namespace std;//const int N = 5;

2017-12-08 11:16:37 271

转载 尾调用优化

尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 一、什么是尾调用?尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个

2017-12-07 22:25:49 267

原创 快速排序(终极版)

1.思路 基本快速排序程序有两种写法,双指针法和选定某一方向以此遍历法,这两种方法在代码中分别对应PartitionDownSTD函数和PartitionUp函数。 在基本快速排序的基础上可以进行优化,其中包括“三数取中确定key值”、“数组较小时选用插入排序”、“聚集相等元素”等。2.代码#include <iostream>#include <algorithm>#include <ct

2017-12-07 21:33:46 428

原创 随机快速排序(内嵌插入排)

1.思路 在快速排序算法的递归实现中,存在一种不太好的现象:随着递归层层深入,大量数据被分割成了小数组;快排对于大数组的划分可以迅速地将元素移动到它正确位置的附近,比如说对1024进行一次均等划分,那么某个元素可能会移动数百个单位位置,若进行4次均等划分,元素在正确位置上的概率就从1/1024骤升到1/64,考虑到64与1024的绝对数值,这是相当高的效率;然而对于小数组,快速排序的效率就不那么理

2017-12-07 11:24:05 265

原创 快速排序(随机版)

1.思路 在前面标准版快速排序的前提下,在每次选择key值的时候,从原来的选择数组最末尾元素变为从数组中随机抽取。随机快速排序基准的选择更能适应大规模随机数据的快速排序。 2.代码(主要部分)int RandomPartition(int *nArr, int nLeft, int nRight) { srand(time(NULL)); int nKey = rand() %

2017-12-07 10:49:38 348

原创 快速排序(QuickSort)

1.大体思路 每次选取数组的一段,取段尾元素为key值,遍历一遍该段,将比key值小的数放在key的前面,比key值大的数放在key的后面(升序排序);假设key的索引值为idx,则在【0, idx - 1】和【idx + 1, arr.size() - 1】之间在此调用该函数,此递归函数的结束标志是:left < right不成立。2.代码#include <iostream>#include

2017-12-06 11:50:08 342

原创 堆排序实现优先队列(Priority queue)

1.大体思路 队列内使用最大堆排序,将最大值放在根节点,出队操即每次取出堆顶值,并将队列长度减1;入队操作则是在队列末尾加入待入队的数字,并使用之前函数BuildMaxHeap(Arr, Len)重新建立最大堆;获得队首值则直接返回Arr[0]即可,每次操作前检查队列是否为空。 2.代码如下#include <iostream>#include <ctime>#include <window

2017-12-05 16:19:49 1185 1

原创 堆排序(HeapSort)

1.大体思路 将待排序数组按照下标建立成一个二叉树的数据结构(假象的,实际上任然是一个一维数组),并构造一个函数MaxHeapify(),使得二叉树的每个父节点的值都要比其孩子节点的值大(使用递归调用实现),因此树的根部即为最大值,将最大值与数组最后一个元素进行交换,并把数组最后一个元素从堆中剔除,采用将数组可操作性长度减一来实现(–nLen),再将刚交换到堆顶的元素使用MaxHeapify()将

2017-12-05 11:26:24 231

原创 随机排列数组(二)

1.大体思路 遍历数组,每次将数组内的数字随机得与数组内任意数进行交换,实现方式为随机生成【0,nLen - 1】的数作为带交换数字的索引值。使用带索引或者地址作为形参的Swape函数进行交换操作,相比于前一篇文章中使用结构体和插入排序实现随机排列数组,本方法更加简单轻便。 2.程序如下#include <iostream>#include <ctime>#include <windows.

2017-12-05 10:26:46 252

原创 随机排列数组

1.思路: 创建一个结构体{int, int*},前者为随机生成的整数,后者保存对应位数组的地址,再对前者进行插入排序,排序完后者对应的数组值即达到随机打散的目的,代码如下:#include <iostream>#include <ctime>#include <windows.h>using namespace std;struct Nodes { int nValue;

2017-12-04 14:46:33 440

原创 图像连通域分析(Two-Pass & DFS )

参考博客:http://blog.csdn.net/icvpr/article/details/10259577#reply two-pass法原文中的代码有错误,添加了并查集数据结构后得以解决。 DFS方法无误。 本文代码的作用是,寻找图片中的所以连通域,并保留面积最大的连通域,其他区域删除。#include <iostream> #include <opencv2\highgui\hi

2017-12-01 20:30:13 2562 2

原创 日历计算(C++类实现)

type1:实现某年某月某日往前或往后N天后日历的输出。 type2:实现两个日期之间相差天数的计算。#include <iostream>using namespace std;int monthDays[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};class Cdata{public: int year, mon

2017-12-01 12:39:53 924

空空如也

空空如也

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

TA关注的人

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