- 博客(63)
- 资源 (3)
- 收藏
- 关注
原创 leetcode_147 Insertion Sort List
题目分析:链表的插入排序实现。解题思路:两种方法实现遍历实现1)利用四个节点实现,其中一个节点指向当前带插入节点,一个节点指向带插入节点的下一个节点,一个节点记录待插入链表实际该插入位置的前一个元素,一个节点指向其带插入链表该插入位置的下一个节点;2)遍历链表,每次先记录当前带插入节点的下一个节点,然后从有序链表的表头开始遍历查找,当出现逆序时,将此节点插入即可。实现程序//对链表执行插入排
2016-03-31 23:02:47 766
原创 leetcode_088 Merge Sorted Array
题目分析:给定两个有序整型数组A和B,数组A的长度为m,数组B的长度为n,假设A能够放得下B。将两个数组合并为一个数组,放在A数组中。解题思路:两种方法实现遍历实现1)定义指向A和B数组(最大值)的指针i和j,同时定义指向合并后数组的最后一个位置的指针k;2)遍历进行判断A[i]与A[j]大小,将较大者放入A[k]中,然后调整指针,继续遍历,直到两个数组都遍历完为止。实现程序class So
2016-03-31 22:51:52 373
原创 leetcode_081 Search in Rotated Sorted Array II
题目分析:在旋转后的有序数组中查找某个元素。(数组中存在重复元素)解题思路:两种方法实现方法1:遍历实现1)先判断要查找的数与数组头元素和数组尾元素大小,确定遍历方向;2)以一定的方向遍历查找,判断是否存在次元素。注意:遍历过程中若出现逆序情况,则说明不存在此元素。方法2:利用二分查找实现1)若target == A[mid],直接返回mid即可;有序情况下的处理如下:2)若A[first]
2016-03-31 22:43:30 337
原创 leetcode_033 Search in Rotated Sorted Array
题目分析:在旋转后的有序数组中查找某个元素。解题思路:两种方法实现方法1:遍历实现1)先判断要查找的数与数组头元素和数组尾元素大小,确定遍历方向;2)以一定的方向遍历查找,判断是否存在次元素。注意:遍历过程中若出现逆序情况,则说明不存在此元素。方法2:利用二分查找实现。1)若target == A[mid],直接返回mid即可;2)若A[first] <= A[mid]时,判断target是否
2016-03-31 22:27:02 383
原创 leetcode_154 Find Minimum in Rotated Sorted Array II
题目分析:在递增的旋转数组中找到最小的数(数组中可能存在重复数)。解题思路:两种方法实现方法1:从后向前一遍遍历扫描实现方法2:利用二分查找实现。实现程序class Solution{ public: //从后向前扫描实现 int findMin1(vector<int> &nums) { if (nums.s
2016-03-31 22:00:00 397
原创 二进制中1的个数统计
题目分析:统计一个整数对应的二进制数中1的个数。其中负数用补码表示。解题思路:两种方法实现方法1:判断最后一个是否为1,然后右移,继续统计(注意处理负数情况方法2:利用n&(n - 1)实现实现程序// 方法一实现:int NumberOf1(int n) { int count = 0; int i = 32; while(i) { i
2016-03-31 21:51:49 516
原创 软件版本
软件版本由于下载软件时,经常涉及到一些版本的选择,但对于alpha和beta等版本一致没详解了解过。今天查了相关信息,打算对其进行一些总结。Release版本Release为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,一边用户更好地使用。Debug版本Dubug为调试版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上是最优的,以便用户很好地使用。Rel
2016-03-31 21:44:13 435
原创 leetcode_023 Merge k Sorted Lists
题目分析:合并k个已经排好序的链表为一个有序链表。解题思路:递归实现利用递归思想,依次两两合并一个有序链表,直到合并为一个链表为止。实现程序//合并两个有序单链表ListNode *mergeTwoLists(ListNode *l1, ListNode *l2){ ListNode *head = (ListNode *)malloc(sizeof(ListNode));
2016-03-31 21:35:54 404
原创 leetcode_208 Implement Trie(Prefix Tree)
题目分析:实现字典树,包含其插入、查找以及前缀查找等方法。可以假设所有输入都只包含a-z字符。解题思路:字典树简介字典树(Trie Tree),又名前缀树,使一种用于快速检索的多叉树。主要用于字符串统计和查找等功能。字典树性质1)根节点不包括字符,除根节点外每个节点包含一个字符;2)从根节点到某一节点,路径上经过的字符串连接起来,为该节点对应的字符串;3)每个节点的所有子节点包含的字符都不相同
2016-03-30 22:49:56 548
原创 高效查找树
前缀树/字典树(Trie Tree)简介Trie Tree是一种用于快速检索的多叉树,主要用于统计和排序大量字符串问题,常被搜索引擎系统用于文本词频统计。其主要特点是最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie Tree的核心思想是空间换时间。利用公共前缀来降低查询时间的开销,从而提高效率。TrieTree的每一层节点数是26^i级别。为了节省空间,可以用动态链表或数组模拟动态。空
2016-03-30 22:19:26 3769
原创 CCV库安装
CCV简介概况CCV是一个基于C语言的、提供缓存的、核心的、新颖的机器数据库。特点1)CCV内置缓存机制,并保持简介的功能接口,从而能够透明缓存,进行图像预处理;2)CCV主要功能不依赖与库函数,使得其很容易嵌入到项目中;3)CCV实现了一些先进算法,如人脸检测、行人检测、目标定位、目标跟踪、特征点检测等。CCV安装环境Ubuntu 14.04步骤下载并解压1)从github上下载对应的源
2016-03-30 10:19:43 4605 4
原创 leetcode_021 Merge Two Sorted Lists
题目分析:要求将两个排好序的list链表合并为一个有序的list链表。解题思路:遍历实现1)定义两个指针p、q、temp,分别指向两个排序需的链表和当前合并排序的链表;2)遍历两个链表,判断p和q指向单元值的大小,并将值小的节点挂接在temp上,然后向前移动该指针;3)最后判断对非空的链表直接挂接,返回合并链表的头结点即可。实现程序ListNode *mergeTwoLists(ListNo
2016-03-29 22:58:20 465
原创 leetcode_004 Median of Two Sorted Arrays
题目分析:求两个有序数组的中位数。要求时间复杂度为O(log(n+m)解题思路:方法一:合并排序实现1)将两个有序序列比分复制到同一个向量中2)对复制后的向量进行排序3)最后针对排序后的去中间的数输出即可。注意:此种方法虽然通过了,但是时间复杂度不是O(log(n+m))方法二:转换为找第k小的数,递归实现1)如果A或者B为空,直接返回B[k-1]或者A[k-1];2)如果k为1,返回A[0
2016-03-29 22:41:22 543
原创 leetcode_083 Remove Duplicates from Sorted List II
题目分析:从有序的链表中,将出现重复的元素全部去除。如1->2->2->3,去除重复后为1->3解题思路:快慢指针实现定义两个指针,一个指针pre指向当前最终无重复链表的最后一个元素,一个指针cur用于遍历时指向的当前指针,一遍遍历链表;判断pre->next的元素与cur的元素是否相等,相等,则cur向前移动,继续判断;当pre->next的元素不等于cur的元素,此时判断pre的next是
2016-03-28 23:08:28 452
原创 leetcode_082 Remove Duplicates from Sorted List
题目分析:从有序的链表中,去除重复数,得到最后的链表,链表中每个元素最多出现一次。解题思路:快慢指针实现定义两个指针,一个快指针,一个慢指针,一遍遍历链表;判断快指针和慢指针中存放的值是否相等,相等则跳过快指针,且快指针向前移动;不相等则同时移动快慢指针即可。实现程序ListNode * deleteDuplicates(ListNode *head){ // 空链表或只有一个元素
2016-03-28 22:54:58 392
原创 OpenCV3.1.0 + contrib编译
OpenCV3.1.0 + contrib编译环境介绍Windows7专业版 + 64位操作系统 工具VS2012 + Cmake3.2.3步骤编译1)打开Cmake-gui,选择opencv source code文件夹和自己定义的编译后放置位置的文件夹2)填写好相关路径后,点击configure。3)configure成功后,在显示红色的区域找到OPENCV_EXTRA_MODULES_P
2016-03-28 21:45:23 2865
原创 leetcode_080 Remove Duplicates from Sorted Array II
题目分析:在有序序列中,去除重复数,得到最后的序列,序列中每个数最多出现两次。要求禁止使用额外数组空间,只能使用静态空间。解题思路:一遍遍历实现使用双指针实现,一个指向当前遍历元素的位置,一个指向不重复出现两次元素应该存放的位置;定义两个变量,分别记录最终序列中即将保存的下一个元素值以及此元素出现的次数;当当前元素与即将存放的元素相等时,记录出现次数加1,否则,依据出现次数,正确向最终序列中填
2016-03-27 22:59:34 440
原创 leetcode_026 Remove Duplicates from Sorted Array
题目分析:给定一个有序序列,要求去除序列中的重复元素,得到一个序列,序列中每个元素只出现一次。要求禁止使用额外数组空间,只能使用静态空间。解题思路:一遍遍历实现使用双指针实现,一个指向当前遍历元素的位置,一个指向不重复元素应该存放的位置。进行一遍遍历指针即可实现。实现程序int removeDuplicates(int* nums, int numsSize) { if (nums
2016-03-27 22:37:38 418
原创 变量定义与const变量定义
变量定义与const变量定义一般变量1)一个整型数 int a2)一个指向整型数的指针 int *a3)一个指向指针的指针,它指向的指针是一个整型数int **a4)一个有10个整型数的数组 int a[10]5)一个有10个指针的数组,该指针指向一个整型数 int *a[10]6)一个指向有10个整型数数组的指针 int (*a)[10]7)一个指向函数的指针,该函数有一个整型参数并返回一个整型
2016-03-26 23:06:06 3909
原创 strcpy和strncat函数
strcpy和strncat函数实现重点关注:函数的返回值为char *;函数所串参数中,注意const的使用;注意字符串操作后,最后’\0’的填充;size_t类型的使用,它依据系统的不同,类型不同,32为系统为unsigned int,64位系统为unsigned int 32。具体实现:#include <iostream> // 引入cout输出流 #include <str
2016-03-26 21:47:08 704
原创 leetcode_060 Permutation Sequence
题意分析:1~n组成的序列从小到大排序,按顺序找出k个序列,并输出解题思路:对于数值n,排列组合共有n!种排列。第一位每个数组开头的序列有(n-1)个序列,共有n!个序列。依此类推,第二位每一个数开头有(n-2)!个序列。因数字不重复,故用sign标记数字是否使用过,data存阶层的数,每次循环找到没有使用的数中第k/data[i]个数就是当前位的数字。class Solution {
2016-03-26 21:05:55 373
原创 leetcode_078 Subsets
题目分析:求一个集合的所以子集,包括空集合全集。解题思路: 递归回溯实现: 1)对集合中的数据进行排序,然后利用递归回溯的思想进行求解即可。 2)每次都对递归得到的子集进行保存即可,然后进一步递归即可。
2016-03-26 20:56:07 427
原创 leetcode_077 Combinations
题目分析:给定数字n和数字k,求从1~n中含有k个数所有可能组合数。解题思路: 递归回溯实现 1)递归一次,填入一个数字,填入的数字不能小于当前的值,防止重复; 2)回溯,弹出最后填入的那个数字,回溯到上一层;
2016-03-26 20:45:14 395
原创 leetcode_076 Minimun Window Substring
题目分析:在字符串S中选一个长度最短的子串,使得子串包含所有的字母,要求时间复杂度为O(n),空间复杂度为O(1)。解题思路: 双指针实现,具体思想如下: 尾指针不断向后扫描,当遇到一个窗口包含了所有T的字符,则收缩头指针,一直到不能收缩头指针位置。 1)定义两个数组,分别用来统
2016-03-26 20:25:19 391
原创 leetcode_075 Sort Colors
题目分析:给定一个数组,数组中的元素只可能为0,1,2,其中0代表红色,1代表白色,2代表蓝色。请按照红、白、蓝的顺序排好。不能使用排序算法实现。解题思路: 一遍扫描遍历数组,需要三个指针进行记录,具体如下: 1)从开始起第一个不确定为0的位置; 2)遍历指针所处的当前位置;
2016-03-26 19:07:47 536
原创 leetcode_074 Search a 2D Matrix
题目分析:编写算法,实现从1个m*n的矩阵中查找给定的值。矩阵特点如下:每一行从左到右递增,每一列从上到下递增。解题思路: 解法一:遍历查找 从右上角开始遍历,每次遍历中,若与target相等,则返回true;若小于target,则向下移动一行,若大于target则向左移动一列,时间复杂度为O(
2016-03-25 22:39:14 373
原创 leetcode_073 Set Matrix Zeros
题目分析:对于一个给定的矩阵,如果它其中的某个元素为0,则将该元素所在行和列的值均变为0。解题思路: 1)创建一个两个数组,分别用于记录矩阵中的行和列是否需要变为0的标志; 2)遍历矩阵,标记矩阵中哪些行和哪些列元素需要变为0; 3)遍历矩阵,根据矩阵中对应行列是
2016-03-25 21:40:54 564
原创 C++书籍
1)C/C++方面《C专家编程》《C++ Primer》《C++标准程序库》《深度探索C++对象模型》《Effective C++》《STL源码剖析》《More Effective C++》《C++反汇编与逆向分析技术》2)数据结构与算法《算法导论》《编程之美》3)数学相关《数学之美》4)操作系统相关《深入理解计算系统》5)网络相关
2016-03-25 20:44:16 507
原创 leetcode_071 Simplify Path
题目分析:简化一个Unix文件路径,注意如下情况:1)“/."表示本级目录,可直接忽略2)“/..”表示返回上一级目录,若上一级目录存在,连通“/.."一并删除,否则只删除"/.."3)若去除冗余后路径为空,返回"/"4)若包含连续"/",删除多余的5)若路径不是单个"/",删除路径最后一个"/"
2016-03-25 17:19:23 419
原创 leetcode_072 Edit Distance
题目分析:将一个字符串变成另外一个字符串所用的最少操作数,每次只能增加、删除或者替换一个字符。解题思路: 设A[i-1][j-1]表示一个从长为i - 1的字符串str1变为长为j - 1的字符串str2的最短距离。str1转换为str2的过程主要涉及以下三种情况: 1)替换:将str1中的某个字符替换为str2中
2016-03-25 17:11:08 494
原创 Android APP架构分析了解
Android APP架构分析了解1)MVC模式主要包括三部分:视图(View);控制器(Controller):业务逻辑;模型(Model):数据保存。通信方式如下:View传送指令到Controller;Controller完成业务逻辑后,要求Mode改变状态;Model将新的数据发送到View,用户得到反馈。通信是单向的。MVC接受用户指令时,可以有两种方式:通过View接受指令,传递给Con
2016-03-24 18:21:51 544
原创 leetcode_063 Unique Paths II
题意分析:此题与Unique Path是一样的,只是要单独考虑障碍物对整个棋盘的影响。解题思路:增加一个判断条件,如果有障碍物,此格填0,表示0个路径。初始条件受障碍物影响如下:1)假设整个棋盘只有一行,那么在第i个位置上设置一个障碍物后,说明位置i到最后一个格子这些路都没法走2)如果整个棋盘只有一列,那么在第i个位置上的障碍物,也会影响从第i位置往后的路。综上,在初始条件中,
2016-03-23 23:02:34 425
原创 leetcode_062 Unique Paths
题意分析:给定一个m*n的二维方格,从方格的左上角开始走,每次只能向下或者向右走一步直到到方格的右下角结束,求总共有多少条不同的路径。解题思路:从左上角走到右下角,每次只能向下或者向右走一步,不管怎么走,都需要m + n - 2步才能走到,而这其中,有m - 1步向下走,n - 1步向右走,只用从这m + n - 2个位置中选择m - 1个位置,则剩余的位置表示向右走。其值为C(m-1, m+
2016-03-23 22:57:19 372
原创 leetcode_069 Sqrt(x)
题目分析:求一个整数的平方根,如果此整数平方个不为整数,则返回其整数部分。解题思路:方法一:利用牛顿迭代法实现。 具体:迭代公式为:x(i+1) = (x(i) + n / x(i)) / 2。计算过程中利用递归即可。 方法二:利用折半查找实现。
2016-03-22 21:38:31 460
原创 leetcode_065 Valid Number
题目分析:判断一个数是否是合法数。解题分析:通过绘制有限状态自动机来实现。各个状态: 1)初始状态,无输入或者只有space的状态; 2)输入了数字之后的状态; 3)输入数字,然后输入小数点的状态; 4)输入数字,输入e的状态;
2016-03-22 21:12:59 462
原创 leetcode_064 Minimun Path Sum
题目分析:找出一条从左上角到右下角的路,且这条路上的每个点的值相加和最小。解题思路:解法一:利用动态规划思想求解。 整个过程为: f[x][y] 从坐标点(0, 0)走到(x, y)的最短路径和; 规划方程为: f[x][y] = (x, y) + min{[f[x-1][y] + f[x][y-1]}; 初始条件为
2016-03-22 20:54:23 550
原创 Ubuntu14.04下OpenCV2.4.10安装
Linux下安装OpenCV操作系统:Ubuntu 14.04 kylin版本,OpenCV 2.4.10编译前期准备工作1)安装依赖包主要为build-essential软件包,为编译程序提供必要的软件包的列别信息,这样软件包才知道头文件、库函数的位置。此外,它还会下载依赖的软件包,安装gcc/g++/gdb/make等基本编程工具,最后组成一个开发环境。使用命令为:sudo
2016-03-19 23:09:23 6979
原创 Boost库安装
简介Boost库是一个可移植、提供源码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员近2000人。Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。Boost库中较著名库:1)Regex,正则表达式库;2)Spirit
2016-03-19 20:55:54 5727
原创 MATLAB与C混合编程
1、Matlab中安装Mex工具。方法:在Matlab中执行mex -setup命令,在提示下选择编译器,并设置编译器(在提示信息中选择)即可。2、在Microsoft VC++ 6.0中设置环境变量。方法:工具——>选项——>目录在Include files中加入以下路径:C:\Program Files\MATLAB\R2014a\extern\include在Librar
2016-03-18 21:55:38 878
Adaboost算法实现
2015-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人