- 博客(46)
- 收藏
- 关注
转载 一个n位的数,去掉其中的k位,问怎样去使得留下来的(n-k)位数按原来的前后顺序组成的数最小
例如8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123。 解决方案贪心算法,在每次被访问的位置保证有最优解。思路一分析:求一共n位,求其中的m位组成的数最小。那么这个m位的数,最高位应该在原数的最高位到第m位区间找,要不然就不能当第m位了,如下图(得到3位数最小,要是百位数在25中找,就当不了百位数了):
2017-03-17 23:18:04
1162
原创 实习期间总结:git命令管理远程仓库
如何更新远程仓库的代码:1)mkdir own 新建自己的目录,cd own 进入自己的目录下;2)git clone https://xxx.xxx...把远程自己项目中的代码clone到本地,ls命令查看,是否已经clone到本地;3)git remote add xxx https://xxx.xxx...添加远程分支,git remote -v 命令查看详细信息;4)git
2017-01-20 17:22:42
356
原创 实习期间的一点收获
新的需求处理步骤: 1)登陆远程仓库,clone代码到本地,命令:git clone https://kaiyu.liu@xxx.xxx.xxx.xx; 2)在本地新建分支,将新建分支上传到远程。切换到新建分支,修改版本号,运行./pkg.sh命令,将代码打包成rpm文件;3)nc命令,把最新的rpm包以及要修改的lua文件拷贝到测试设备上,nc命令使用示例:从192.168.2.
2017-01-20 16:43:20
1104
转载 Nginx与Lua
一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器。目前,Apache依然web服务器中的老大,但是在全球前1000大的web服务器中,Nginx的份额为22.4%。Nginx采用模块化的架构,官方版本的Nginx中大部分功能都是通过模块方式提供的,比如Http模块、Mail模块等。通过开发模块扩展Nginx,可以将Nginx打造成一个全能的应用服务器,这
2016-12-19 18:40:32
1479
转载 Lua入门
1,lua简介Lua 是一个小巧的脚本语言。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式
2016-12-16 15:00:58
320
转载 stl hashmap与map hashmap与hashtable
MAP1。目录map简介map的功能使用map在map中插入元素查找并获取map中的元素从map中删除元素2。map简介map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。3。map的功能自动建立Key - value的对应。key 和 value可以是
2016-11-28 10:51:15
254
转载 实现只有0,1,2三种元素的乱序数组的排序
实现只有0,1,2三种元素的乱序数组的排序待补充题目:一个数组中只有0,1,2三种元素,要求对这样的数组进行排序。1.思路:1.1思路1: 第一眼看到这样的题目,会举得非常简单,只需要两次遍历数组就可以完成了。第一次遍历,扫描数组中的元素,每次遇到0则count0++,遇到1则count1++,遇到2则count2++,这样一趟下来就能够统计出
2016-11-28 09:47:23
1736
1
转载 C++运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运
2016-11-24 11:29:47
260
原创 两条线段是否相交
假设给点线段ab和cd,如果点c、d分别在线段ab的两侧,同时a、b分别在线段cd的两侧,则可以确定两条线段相交,可以通过叉积来判断两条线段是否相交,ab×ac与ab×ad的结果为异号,并且cd×ca与cd×cb的结果为异号,则两条直线相交。点c、d分别在线段A所在直线的两侧,同时点a、b分别在B所在直线的两侧,则可以确定A与B相交.判断两线段是否相交1)快
2016-11-12 22:31:28
533
转载 动态规划之装配线调度
前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法思想。本书在第二章介绍归并排序时,详细介绍了分治算法的操作步骤,详细的内容请参考:http://www.cnblogs.com/Anker/ar
2016-11-12 21:34:01
454
转载 char *p="abc" 与 char p[]="abc" 的区别
有这样一段代码:[cpp] view plain copy#include "stdio.h" char *get_string_1() { char p[] = "hello world!"; return p; } char *get_string_2() { char
2016-11-08 00:24:58
594
转载 堆和栈的区别
C语言中堆和栈的区别一.前言:C语言程序经过编译连接后形成编译、连接后形成的二进制映像文件由栈,堆,数据段(由三部分部分组成:只读数据段,已经初始化读写数据段,未初始化数据段即BBS)和代码段组成,如下图所示:1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。2.堆区(heap):一般由程序
2016-11-08 00:11:04
191
原创 多线程安全性
单例模式有好几种实现方法,为了保证在多线程环境下能工作,可以在加同步锁前后两次判断实例是否存在public class Singleton { //私有的默认构造函数 private Singleton() {} //注意,这里没有final private static Singleton sing
2016-11-03 23:32:55
349
原创 算法实现求n的阶乘(防止溢出)
求大整数n阶乘,在找工作笔试和面试的过程中,不止一次遇到这个问题,用一个for循环迭代出的结果肯定是不行的,即直接用int,默认是32位,它能表示的最大值为2,147,483,647,但是12的阶乘为479,001,600,13的阶乘为6,227,020,800,所以当n为13的时候已经溢出了。所以当n为更大的值时,需要采用巧妙的方法来防止溢出。我们可以用数组的方式来存储每一位数据。具体代
2016-11-03 22:34:01
8767
2
转载 LRU cache替换算法
什么是 LRULRU Cache是一个Cache的置换算法,含义是“最近最少使用”,把满足“最近最少使用”的数据从Cache中剔除出去,并且保证Cache中第一个数据是最近刚刚访问的,因为这样的数据更有可能被接下来的程序所访问。LRU的应用比较广泛,最基础的内存页置换中就用了,对了,这里有个概念要清楚一下,Cache不见得是CPU的高速缓存的那个Cache,这里的Cache直接
2016-11-03 11:20:06
6906
转载 关于函数返回局部变量的内存细节知识
我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量。为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段、只读
2016-11-03 11:07:54
877
转载 前缀,中缀,后缀表达式转换
关键字:概念, 前缀表达式, 前缀记法, 中缀表达式, 中缀记法, 波兰式, 后缀表达式, 后缀记法, 逆波兰式它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。举例:(3 + 4) × 5 - 6 就是中缀表达式- × + 3 4 5 6 前缀表
2016-10-24 09:37:42
304
转载 socket网络编程
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型
2016-10-23 18:56:22
198
转载 两个for循环的优缺点
1.白盒测试方法中的代码检查法需要重点考虑代码的执行效率,阅读以下两个循环,回答问题1和问题2。 循环1: for (i=0;i { if(condition) DoSomething(); else DoOtherthing(); } 循环2: if
2016-10-13 00:07:21
643
转载 STL中常用数据结构
STL中常用的数据结构:[1] stack、queue默认的底层实现为deque结构。[2] deque:用map管理多个size大小的连续内存块,方便头尾插入。[3] vector:变长动态数组,每次增大1.5倍,删除元素时不释放空间。[4] priority_queue底层默认采用vector向量O(nlogn)。[5] list:双向链表容器
2016-10-07 20:17:20
761
转载 分治,动态规划,贪心,回溯法,分支界限法
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的
2016-10-04 19:16:17
734
转载 经典的BM算法
KMP的匹配是从模式串的开头开始匹配的,而1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法:Boyer-Moore算法,简称BM算法。该算法从模式串的尾部开始匹配,且拥有在最坏情况下O(N)的时间复杂度。在实践中,比KMP算法的实际效能高。 BM算法定义了两个规则:坏字符规则:当文本串中的某个字符跟
2016-10-04 17:08:13
413
转载 迪杰斯特拉算法详解
1、迪杰斯特拉算法介绍迪杰斯特拉算法是典型最短路径算法,用于计算图或网中某个特定顶点到其他所有顶点的最短路径。主要特点是以起始点为中心向外,层层扩展,直到扩展覆盖所有顶点。2、迪杰斯特拉算法思想设G=(V,E)为一个带全有向图,把图中顶点集合V分成两组。第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将所到达最短路径的顶点加入到集合S中
2016-10-04 11:02:11
4446
转载 动态规划求解最长公共子序列
http://blog.youkuaiyun.com/zzuchengming/article/details/50822735实现代码如下:[cpp] view plain copy #include "stdafx.h" #include using namespace std; void lcs(char *a, char
2016-10-04 10:49:54
260
转载 二叉树的先序中序后序遍历
1,分别写了先序遍历,中序遍历和后序遍历以及层次遍历的非递归算法![cpp] view plain copy // 树的建立和遍历.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using name
2016-09-27 00:27:04
366
转载 fixed和setprecision等C++格式控制的函数使用
coutsetiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执行由有参数指定区域内的动作;iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧;iso::right 也是setiosflag
2016-09-20 10:43:58
666
转载 TCP/IP协议中的三次握手和四次断开
转载地址:http://blog.youkuaiyun.com/whuslei/article/details/6667471/建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Se
2016-09-10 17:38:49
355
转载 快速排序及其优化
转载地址:http://blog.youkuaiyun.com/hacker00011000/article/details/521761001、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2、快速排序的三个步骤: (1)选择基准:在
2016-09-05 20:25:34
474
转载 同一进程中的线程究竟共享哪些资源
http://blog.youkuaiyun.com/zzuchengming/article/details/52131940进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源
2016-08-30 12:57:22
10377
1
转载 操作系统基础知识
转载地址:http://www.cnblogs.com/webary/p/4782903.html1.进程和线程 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间(也有少量自己的地址空间);而进程有自己独立的地址空间(多个进程之间一般不会共享地址空间);
2016-08-30 11:53:24
477
转载 双向队列
转载地址http://www.cppblog.com/wanghaiguang/archive/2012/06/04/177477.htmlC++ Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块
2016-08-21 21:19:43
458
转载 解析局部对象与临时对象
http://blog.youkuaiyun.com/lujiandong1/article/details/42195595没有名字的对象就是临时对象,它存在于完整的表达式的生存其间。也就是说,当表达式计算结束后就会被释放。一个例外是,当临时对象被引用时,它的生存期将延长到与这个引用的生存期一样长。局部对象就是可见区域在一个函数范围的对象。局部对象有两种,静态局部对象的生存期起于所在函数第一
2016-07-27 11:06:20
372
转载 C++中构造函数或析构函数定义为private
转载地址:http://www.cnblogs.com/kangyoung/articles/2375211.html很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么?(1)构造函数定义private
2016-07-26 19:49:09
626
转载 STL"源码"剖析-重点知识总结
转自:http://www.cnblogs.com/luoxn28/p/5671988.htmlSTL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过《STL源码剖析》这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :)1、STL概述STL提供六大组件,彼此可以组合套用:容器(Containers
2016-07-22 15:07:43
266
转载 内存分配函数malloc calloc realloc
malloc:原型:extern void *malloc(unsigned int num_bytes); 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。 功能:分配长度为num_bytes字节的内存块 返回值
2016-07-12 15:24:19
296
原创 B树、B+树、B*树
B树B树是一种平衡多路查找树,满足下列性质:(1)每个结点的关键字降序排列;(2)第i个孩子的所有关键字(3)所有的叶子结点都在同一层;(4)含有p个关键字的结点有p+1个孩子结点;(5)最小度用t(>=2)来表示,最小度即关键字最少的内结点的孩子数目。根结点的关键字个数为[1,2t-1],非根结点的关键字个数为[t-1, 2t-1]。B树的高度:设总共有n个关键字,最
2016-06-15 20:50:15
749
转载 为什么需要字节对齐?
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访
2016-05-04 21:50:54
279
转载 三种快速排序以及快速排序的优化
http://blog.youkuaiyun.com/insistgogo/article/details/77850381、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2、快速排序的三个步骤:(1)选择基准:在待排序列中
2016-03-04 16:01:44
515
转载 各种内部排序算法时间复杂度比较和排序方法的选择
转载地址:http://blog.chinaunix.net/uid-26565142-id-3126683.html选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有
2016-01-25 20:31:17
5768
原创 剑指offer面试题八:旋转数组的最小数字
一,题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。二,分析 最容易想到的方法是从头到尾遍历一遍,时间复杂度为O(n)。 但是我们并没有利用旋转数组本身的性质,发现原数组可以划分为两个排序的子数组,而且前面
2016-01-23 19:25:08
303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人