自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 数组第K小的数

1.1 题目描述 查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。 输入描述: 输入有多组数据。 每组输入n,然后输入n个整数(1<=n<=1000),再输入k。输出描述: 输出第k小的整数。输入例子: 6 2 1 3 5 2 2 3输出例子: 3方案1:对数组进行排序,然后找出第k小的数字时间复杂度O(nlogn), 空间复杂度O

2017-01-09 21:57:55 966

原创 交换两个值的方法

方法1:利用中间变量交换 void swap(int &a, int &b) { int tmp = a; a = b; b = tmp; }方法2:不使用中间变量,直接在a 和 b基础上进行修改 void swap(int &a, int &b) { a += b; b = a - b;

2017-01-09 19:50:12 320

原创 程序在内存中的分布

在现代操作系统中,当我们提到内存,一般指物理内存和虚拟内存。虚拟内存的存在一方面是为了扩充内存大小,另一方面是给每一个程序一个独立的,统一的内存空间,方便编译。虚拟空间是CPU内部的寻址空间,程序在内存中的分布指的是虚拟内存中的存储方式。 实际上,内存的管理方式是以页为单位的,程序运行CPU用的是虚拟地址,虚拟内存的意义在于每次不用把整个程序全部装入内存中,需要用到哪一块,如果在内存里,那么

2017-01-09 19:33:47 397

原创 程序员面试金典第二章:链表(6) 链表环路

1.1 问题描述 给定一个链表,判断该链表是否有环路,如果有,就返回链表环路开始的结点,如果没有,返回nullptr1.2 解题思路 思路1:判断链表是否有环路,通常采用快慢指针法,所谓快慢指针法的意思是,有两个指针,一个一次走2步,这个是快指针,另一个一次走1步,这个是慢指针。假设链表有环,那么快指针一定可以追上慢指针。 判断完有环,那么重新声明一个指向开头的指针,与慢指针一

2017-01-09 14:00:22 306

原创 程序员面试金典第二章:链表(7)回文链表

1.1 题目描述请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:false1.2 解题思路思路1:用快慢指针法,假设链表长度为n,如果n为偶数,从位置n/2开始,n为奇数n/2+1位置开始。用stack保存之后所有的数字,然后将指针设置到开头,

2017-01-09 13:41:57 227

原创 程序员面试金典第二章:链表(5) 链式A+B

1.1 题目描述 有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。测试样例:{1,2,3},{3,2,1}返回:{4,4,4}1.2 解题思路思路1:每一次将两个链表的同一位取出并与

2017-01-09 13:09:21 289

原创 c++智能指针

1.智能指针存在的意义 c++不像java等语言有自动的内存回收机制,程序员每次都必须对自己new出来的堆内存进行手动delete,这样做固然减少了系统对于内存的管理开销,给程序员极大地自主性,但是如果忘记delete分配的内存,就会造成内存泄漏,甚至导致程序崩溃。 智能指针在c++11中存在的意义就在于解决内存泄漏问题,对于没有指向的内存进行自动释放。常见的智能指针有std::aut

2017-01-08 14:21:19 211

原创 随机洗牌算法

所谓随机洗牌算法就是将1-54或者推广来说1-n位置上的数字随机的进行排列,共有N!个排列,且每个机会都是均等的。朴素的洗牌算法用rand()函数,每次获得一个index,如果这个index上的数字没有被访问过,把它加到结果中,如果已经访问,那么再次随机。 时间复杂度O(n*n)空间复杂度O(n) 很容易证明这个算法是对的,第一次有n种选择,第二次n-1.。。。。最优的洗牌算法

2017-01-07 13:55:17 345

原创 程序员面试金典第二章:链表(4) 链表分割

1.1 题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。1.2解题思路思路1:新建两个新的链表,依次遍历当前链表,把节点根据大小插入到这两个链表后面,最后,将两个链表重新串起来时间复杂度O(n), 空间复杂度O(1)clas

2017-01-06 20:17:34 335

原创 程序员面试金典第二章:链表(3) 链表中倒数第k个结点

1.1 题目描述实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true1.2 解题思路思路1:正常的删除需要记录前一个节点,然后直接跳过这个节点,把这个节点delete掉,空间释放即可。这里不能访问前一个节点,那么可以想到的是,把后一个节点的数值赋值给当前节点,把当前节点当成前一个=节点,将后一个节点跳

2017-01-06 19:43:11 263

原创 程序员面试金典第二章:链表(2) 链表中倒数第k个结点

1.1 题目描述输入一个链表,输出该链表中倒数第k个结点。1.2解题思路思路1:用两个指针,一个先走k步,然后两个一起走,每次走一步,直到先走的走到最后,返回后一个指针指向的节点。时间复杂度O(n) 空间复杂度O(1)class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)

2017-01-06 19:31:54 274

原创 ICP 多视角点云对齐方法介绍

最近的工作涉及到点云重建部分,所以写下这些博客,用来作为笔记,整理自己的思路。这是该部分文章的第一篇,主要介绍点云对齐的方法。物体从扫描到生成完整的网格的过程: 1.通过扫描仪获得物体的多片点云数据 2.任意两片点云之间进行粗对齐,获得精细对齐的初始位置 3.使用ICP算法进行精细对齐 4.全局优化多片点云的位置 5.去除点云的重叠部分,并且网格化1.0 三

2017-01-06 15:29:08 19388 2

原创 程序员面试金典第一章:数组与字符串(8) 翻转子串

1.1 题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world",

2017-01-05 14:28:34 429

原创 程序员面试金典第一章:数组与字符串(7)清除行列

1.1 题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。测试样例:[[1,2,3],[0,1,2],[0,0,1]]返回:[[0,0,3],[0,0,0],[0,0,0]]1.2 解题思路:思路1:

2017-01-05 14:24:33 295

原创 程序员面试金典第一章:数组与字符串(6) 像素翻转

1.1 题目描述 有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。测试样例:[[1,2,3],[4,5,6],[7,8,9]],31.2解题思路思路1:必须原地址进

2017-01-05 14:14:23 307

原创 程序员面试金典第一章:数组与字符串(5) 基本字符串压缩

1.1 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个string iniString为待压缩的串(长度小于等于10000),保证串内字符均由大小写英文字母组成,返回一个string,为所求的压缩后或未变化的串。测试样例"aabc

2017-01-05 14:04:27 231

原创 程序员面试金典第一章:数组与字符串(4) 空格替换

1.1 题目描述 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。测试样例: “Mr John Smith”,13 返回:”Mr%20John%20Sm

2017-01-05 11:33:16 256

原创 程序员面试金典第一章:数组与字符串(3) 确定两串乱序同构

1.1 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。测试样例: “This is nowcoder”,”is This nowcod

2017-01-05 10:52:19 299

原创 程序员面试金典第一章:数组与字符串(2) 原串翻转

1.1 题目描述 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。 测试样例: “This is nowcoder” 返回:”redocwon si sihT”1.2解题思路思路1:声明一个新的string,从后向前

2017-01-05 10:40:55 253

原创 程序员面试金典第一章:数组与字符串(1) 确定字符互异

1.1 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou” 返回:True “BarackObama” 返回

2017-01-05 10:31:12 239

转载 C++内存分配问题汇总(多篇博客的总结)

C/C++内存分配有三种方式: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。 栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,亦称动态内存分配。程序在运

2016-09-19 20:18:11 672

原创 排序算法分析

排序定义所谓排序,即将原本无需的一个序列重新排列成有序的序列。注意,这个序列中的每一项可能是单独的数据元素,也可能是一条记录。稳定性所谓稳定性,是指排序中的序列中有两个或者两个以上相同的数据项,排序前后,这些相同的数据项相对位置没有发生变化,那么这个排序算法是稳定的。 下面就几种常见排序算法进行总结分析,并会加入一些代码分析。1.直接插入排序(稳定)算法基本思想 有点像咱们打扑克牌的

2016-09-19 18:30:49 258

原创 二叉搜索树应用分析

二叉搜索树(B树)特性1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 基本操作搜索 struct TreeNode { int val; TreeNode * left; TreeNode * right;

2016-09-19 15:50:22 375

原创 Leetcode:4. Median of Two Sorted Arrays

There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Example 1: nums1 = [1, 3] num

2016-09-17 20:12:12 183

原创 Leetcode :3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.Examples:Given “abcabcbb”, the answer is “abc”, which the length is 3.Given “bbbbb”, the answer is “b”, with the le

2016-09-17 20:09:49 188

原创 算法1.常见查找算法以及数据结构比较

最近一直在复习,查找算法作为最常用的算法,作为算法系列第一部分总结一下,一来作为笔记,二来可以与大家一起分享,共同学习,共同进步,转载请注明出处,谢谢。1. 顺序查找原理 顺序查找,按照字面意思,就是按照排列顺序,依次将查找关键词key与元数据每一项进行对比,如果找到就结束。适用范围 所有数据,但是对于过大的数据,不太实用,时间复杂度较高时间复杂度、空间复杂度分析 时间复杂度O(n

2016-09-17 18:49:05 657

原创 Leetcode:2. Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linke

2016-09-14 19:42:59 163

原创 Leetcode:1.Two Sum

Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Example: Given nums = [2,

2016-09-14 15:07:57 188

空空如也

空空如也

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

TA关注的人

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