自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Linux】反单引号``的用法,declare的用法

反单引号``在一串命令中,在``之内的命令会被先运行,而它运行出来的结果将被作为外部的输入信息。declare由于在默认情况下,bash对于变量有几个基本的定义:1. 变量类型默认为字符串,所以如果不指定变量类型,那么1+2为一个字符串而不是一个计算,例如如下# sum=100+20[root@XXX) /root]# echo $sum100+202. b

2015-07-31 10:06:48 866

原创 【Java】不使用中间变量,如何交换两个数?

a = 9, b = 4方法一:a = a - b //5b = b + a //5+4 = 9a = b - a //4交换成功方法二:利用位运算a = a ^ bb = a ^ b //aa = a ^ b //b

2015-07-28 16:15:17 509

原创 【操作系统】如何测量上下文切换时间

上下文切换(context switch)是两个进程之间切换(也即,将等待中的进程转为执行状态,而将正在执行的进程转为等待或终止状态)所耗费的时间。这样的动作会发生在多任务处理系统中,操作系统必须将等待中进程的状态信息载入内存,并保存执行中进程的状态信息。为了解决此题,我们需要记录两个交换进程执行最后一条和第一条指令的时间戳,而上下文切换时间就是这两个进程的时间戳的差值。

2015-07-28 15:45:00 1418

转载 【SQL】GROUP BY 和HAVING子句

在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。SELECT SUM(population) FROM bbc这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国

2015-07-28 10:01:27 484

原创 【数据库】查询语句

隐式连接与显式连接隐式连接:SELECT CourseName, TeacherNameFROM Courses INNER JOIN TeachersON Courses.TeacherID = Teahcer.TeacherID等价于显式连接SELECT CourseName, TeacherNameFROM Courses, TeachersWHE

2015-07-27 14:51:06 598

原创 【C++, Java】C++模板和Java泛型之间有何不同?

许多人都认为模板template和泛型generic这两个概念是等价的,因为两者都允许我们按照List的样式编写代码。不过,各种语言是怎么实现该功能,以及为什么这么做,却千差万别。Java的泛型的实现根植于“类型消除”这一概念。当源代码被转换成Java虚拟机字节码时,这种技术会消除参数化类型。例如,假设有一下java 代码: Vector vector = new Vector()

2015-07-24 18:02:33 6803

原创 【Java】将构造函数声明为私有有什么作用?

将构造函数声明为私有,可以确保本类以外的地方都不能实例化这个类,单例模式就是这么干的。在这种情况下,要创建这个类的实例,唯一的办法是提供一个公共静态方法,就像工厂方法模式那样。此外,由于构造函数是私有的,因此这个类也不能被继承。

2015-07-24 17:13:50 1456

原创 【Java】集合框架

Java的集合框架collection framework非常有用ArrayList: ArrayList是一种可动态调整大小的数组,随着元素的插入,数组会随时扩容。Vector:  Vector与ArrayList非常类似,只不过前者是同步的(synchronized),两者语法也相差无几。LinkedList: Java内建的LinkedList类,使用时会引出一些迭代器的语法。

2015-07-24 17:06:09 330

原创 【Java】final, finally, finalize()

final关键字java的final关键字用于变量,类或方法时,含义各不相同变量: 一旦初始化,变量值就不能修改方法:该方法不能被子类重写类: 该类不能派生子类关键字finally关键字finally和try/catch语句块配对使用,即使有异常跑出,也能确保某段代码一定会执行。finally语句块在try和catch之后,在控制权交回之前执行public

2015-07-24 15:38:44 317

原创 【C++】用C编写一个my2DAlloc函数,可以分配二维数组。

用C编写一个my2DAlloc函数,可以分配二维数组。将malloc()的调用次数降到最少,并确保可以通过arr[i][j]访问该内存二维数组就是数组的数组,首先想到,先创建一个一维的指针数组,每个指针指向一个一位数组。如下:int** my2DAlloc(int rows, int cols) { int** rowptr; int i; rowptr = (int**)mallo

2015-07-24 14:39:34 709

原创 【C++】编写一个智能指针类。

编写一个智能指针类。智能指针是一个数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为0,就释放该对象。除了指针对象外,我们还需要一个引用计数的指针设定对象的值,并将引用计数计为1,需要一个构造函数新增对象还需要一个构造函数析构函数负责引用计数减少和释放内存通过覆写赋值运算符,

2015-07-24 13:47:59 1978

原创 【C++】C语言的关键字volatile有何作用?

C语言的关键字volatile有何作用?volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能被外界修改。操作系统,硬件或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改,因此,每次使用时,编译器都会重新从内存中获取这个值。volatile变量不会被优化掉,这非常有用。volatile变量在多线程程序里也很有用。对于全局变量,任意线程

2015-07-23 17:00:53 392

原创 【C++】深拷贝和浅拷贝

浅拷贝会将对象所有成员的值拷贝到另一个对象里。深拷贝除了拷贝所有成员的值,还会进一步拷贝所有指针对象。/* * copy.cpp * * Created on: 2015?7?23? * Author: nanzhou */struct Test { char* ptr;};void shadow_copy (Test & src, Test & dest)

2015-07-23 16:53:01 365

原创 【数据结构】散列表

比较并对比散列表和STL map。 如果输入的数据量不大,可以选用哪些数据结构替代散列表?在散列表里,值的存放是通过将键传入散列函数实现的。值并不以排序后的顺序存放。此外,散列表以键值找出索引,进而找到存放值的地方,因此,插入或查找操作均摊后可以在O(1)时间内完成。(假定该散列表很少发生碰撞冲突)散列表还必须处理潜在的碰撞冲突,一般通过拉链法解决(chaining),也就是,创建

2015-07-23 16:23:10 625

原创 【C++】用C++写个方法,打印输入文件的最后K行

用C++写个方法,打印输入文件的最后K行使用循环数组#include using namespace std;void printLast10Lines(char* fileName) { const int k = 10; ifstream file(fileName); string L[k]; int size = 0; while( file.gooe() ) {

2015-07-23 15:53:27 622

原创 【C++】模板

模板是一种代码重用方式,不同的数据类型可以套用同一个类的的代码。比如,我们可能有列表类的数据结构,希望可以放进不同类型的数据,如下:#include using namespace std;template class ShiftedList { T* array; int offset, size;public: ShiftedList(int sz) : offset(

2015-07-23 15:29:30 355

原创 【Eclipse】Eclipse C++ MINGW :The program file specified in the launch configuration does not exist

1.Right click on your project -> run configurationscheck  enable auto build2.Right click on your project --> PropertiesRun/Debug settingsDelete whatever is set as "launch configuration for

2015-07-23 13:43:24 833

原创 【C++】构造函数 析构函数 虚函数

C++中所有成员变量和方法都默认private,可以用关键字public修改属性。构造函数和析构函数对象创建时,会自动调用类的构造函数。如果没有定义构造函数,编译器会自动生成一个默认构造函数default constructor。另外,我们也可以自己定义构造函数。Person( int a) {id = a;}另外,类的数据成员还可以这样初始化:Person(int

2015-07-22 17:39:23 487

原创 【Java】假设你正在读取一串整数,每隔一段时间,你希望找出数字X的秩(小于或等于x的值的数目)。

假设你正在读取一串整数,每隔一段时间,你希望找出数字X的秩(小于或等于x的值的数目)。请事先数据结构和算法支持这些操作。也就是说,实现track(int  x)方法,每读入一个数字都会调用该方法,以及getRankOfNumber(int x),返回元素值小于等于x的元素个数(不包括x本身)用一个数组存放好所有已排序的元素,getRankOfNumber(int x)实现很简单,执行二分查

2015-07-22 16:37:36 593

转载 【Java】static关键字

类的静态方法不经实例化就可以调用static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。AD:static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被st

2015-07-22 14:41:46 248

原创 【Java】有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置

有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置如果没有空字符串,可以直接用二分查找法,但是有空字符串是不是就不行了呢?我们可以对二分查找法做一些改进,如果mid对应的是空字符串,就把mid移到离它最近的非空字符串的index。public class searchR { public int searchRE(String[] strings, S

2015-07-22 14:18:42 1449

原创 【算法】对一个20GB大的文件排序

设想你有一个20GB的文件,每行一个字符串,说明如何对这个文件进行排序。内存肯定没有20GB大,所以不可能采用传统排序法。但是可以将文件分成许多块,每块xMB,针对每个快各自进行排序,存回文件系统。然后将这些块逐一合并,最终得到全部排好序的文件。外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(

2015-07-22 13:55:52 15922 2

原创 【Java】找出数组中的某个元素,数组原本有序,但已被旋转多次

给定一个排序后的数组,包含n个整数,但这个数组已被旋转多次,次数不详。编写代码找出数组中的某个元素。假定数组元素原先是按从小到大的顺序排列的。还是考虑二分查找考虑下面的两个数组:array1 = [10, 15, 20, 0 ,5]array2 = [50, 5, 20, 30, 40]这两个数组的中间元素都是20,但5在其中一个的左边,在另一个的右边,可见,只比较中间元素

2015-07-22 13:54:16 542

原创 【Java】编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置

编写一个方法,对字符串数组进行排序,将所有变位词排在相邻的位置只要求将变位词排在一起,没有要求这些词按照什么顺序排在一起。怎么检查两个词是不是变位词呢?统计每个字符串中各个字符出现的次数,如果两者都相同则返回true。或者,直接将字符串进行排序,如果两个字符串排序后相同,则一定是变位词。import java.util.Arrays;import java.util.Comparat

2015-07-22 10:46:45 2813 1

原创 【Java】两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。

给定两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。看起来很像归并排序的最后一步,但还有些不同,由于A的末端足够容纳B,我们不需要再新建一个缓冲数组。那么直接将A和B顺序比较插入相应位置即可,但如果从小到大比较,A的数据会被覆盖,由于A的末端是空的,我们可以从A和B最大的元素开始比较,从后往前依次插入.要注意的是如果B的元素比A多,那么要逐一比

2015-07-22 10:36:08 1823

原创 【Java】二分查找

public class binarySearch { int binarysearch(int[] a, int x) { int low = 0; int high = a.length - 1; int mid; while(low <= high) { mid = (low + high) / 2; if(a[mid] < x) { low =

2015-07-21 17:14:46 274

原创 【Java】快速排序

快速排序是随机挑选一个元素,对数组进行分割,将所有比它小的元素排在前面,比它大的元素排在后面,这里分割经由一系列元素交换的动作完成。快速排序的时间复杂度:最好的情况下O(n(log2n)), 最坏的情况下O(n2)空间复杂度 O(1)public class quickSort { void quicksort(int arr[], int left, int right) {

2015-07-21 17:00:43 338

原创 【Java】归并排序

归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2015-07-21 16:30:57 345

原创 【Java】如何设计facebook或linkedin的超大型社交网站?

如何设计facebook或linkedin的超大型社交网站?请设计一种算法,展示两个人之间的连接关系或社交路径,比如:我-> Bod -> Susan -> Jason -> you简化问题,先忘记几百万用户,针对简单情况设计算法。把每个人看成一个结点,如果两个结点之间有连线,则表示这两个人互为朋友class Person {Person[] friends;}直接从一个人

2015-07-21 10:01:35 851

原创 【Java】单例模式

如果我们希望一个类只有一个实例,就要用到单例模式。简单实现public class SingletonClass { private static SingletonClass instance = null; public static SingletonClass getInstance() { if (instance == null) { instance = n

2015-07-16 14:42:02 355

原创 【Java】只允许使用加号,实现整数的减法,乘法,除法

2 - 1,可以看做2 + (-1),那么两数a和b相减,就是a加上取反后的b(也就是改变符号位)继续,两数a和b相乘就是b个a连加那么两数相除呢?这似乎有点难,如果a/b = c,  那么a是c个b连加的结果,可将b连加直到小于等于a,连加的次数即为商public class arithmetic { public static int negate(int b) { int

2015-07-16 14:08:11 2299

原创 【Java】给定直角坐标系上的两条直线,确定这两条直线会不会相交

这个问题很简单,但要注意以下几点:1. 多提问,说明自己的假设条件2. 尽量设计并使用数据结构,注重面向对象设计3. 仔细考虑怎么设计数据结构来表示一条线,选择都各有优劣,须权衡取舍4. 不要假设斜率和y轴截距是整数5. 了解浮点表示法的限制,切记不要用==检查两个浮点数是否相等,而应该检查两者差值是否小于某个极小值public class LineIner { publ

2015-07-16 12:26:12 1982

原创 【Java】找出0到n之间的所有素数

方法是剔除所有可以被素数整除的非素数第一是找出每个素数第二是找出每个素数的倍数public class findPrime { public boolean[] findPrimes( int max ) { boolean[] flags = new boolean[max + 1]; for (int i = 2; i < max+1; i++) { flags[i

2015-07-16 11:05:01 2139

原创 【Java】位运算

数组A包含了0到n的所有整数,但其中缺了一个。在这个问题中,只用一次操作无法取得数组A里某个整数的完整内容。此外,数组A的元素皆以二进制表示,唯一可用的访问操作是“从A[i]取出第j位数据”,该操作时间复杂度为常数。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?找出0到n之间缺失的整数,可以将数字求和在于0到n的数字之和做减法,差值就是缺失的数字那么怎么求出每个数字呢?

2015-07-15 10:49:58 439

原创 【Java】位运算的其他问题

1. 给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数(一个略大,一个略小)2. 解释代码 n & ( n - 1) ==  0是什么意思? 说明n是2的次幂3. 编写函数,确定需要改变几个位,才能将整数A转成整数Bpublic class bitSwap { public static int bitSwapReq(int a, int b) { int

2015-07-14 22:51:50 473

原创 【Java】打印一个0到1之间的实数的二进制表示

给定一个介于0和1之间的实数,(如0.72), 类型为double,打印它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”public class printBinary { public static String printBin( double num ) { if (num >= 1 || num < 0) { return "ERROR

2015-07-14 17:17:01 866

原创 【Java】给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。

给定两个32位的整数N与M,以及表示比特位置的i与j。编写一个方法,将M插入N,使得M从N的第 j 位开始,到第 i 位结束。假定从 j 到 i 位足以容纳M,也即若M = 10011, 那么 j 和 i 之间至少可容纳5个位。 例如, 不可能出现 j = 3 和 i = 2的情况,因为第3位和第2位之间放不下M。示例:输入: N = 10000000000, M = 10011, i

2015-07-14 17:02:38 1671

原创 【数据结构】位运算

x & (~0  还有一些:(0s,1s表示一串0和一串1)x ^ 0s = xx ^ 1s = ~xx ^ x = 0x & 0s = 0x & 1s = xx & x = xx | 0s = xx | 1s = 1x | x = x常见的位操作:获取,设置, 清楚以及更新位数据1. 获取某一位是1还是0:将1左移i位,得到形如

2015-07-14 16:28:55 499

原创 【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树

给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树二叉查找树是,对于任意一个结点,左边的结点均小于它,右边的结点均大于它要创建一个高度最小的树,就必须让左右子结点的数量越接近越好,也就是说,要让中间值成为根节点,这样,左边的一半是左子树,右边的一半是右子树然后,继续以类似的方式构造整棵树,数据每一段的中间值成为根元素,左边一半成为左子树,右边一

2015-07-14 15:08:20 2471

原创 【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径

给定有向图,设计一个算法,找出两个结点之间是否存在一条路径通过图的遍历,比如深度优先或者广度优先搜索等,就能解决这个问题从结点的其中一个出发,在遍历过程中,检查是否找到另一个结点即可在遍历过程中,访问过的结点都应被标记为“已访问”,以避免重复访问深度优先实现起来比较简单,递归即可但广度优先很适合用来找最短路径,深度优先在访问临近结点之前需要先深度遍历其中一个临近结点impo

2015-07-14 14:01:53 3573 1

单片机简易电子琴设计

简单的单片机程序 延时子程序和键盘发声

2010-04-08

空空如也

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

TA关注的人

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