Posts List

剑指offer--字符串

C/C++中每个字符串都以字符’\0’作为结尾,这样我们就可以很方便的找到字符串最后的尾部。由于这个特点,每个字符串中都有一个额外字符的开销,稍不留神就会造成字符串的越界。 为了节省内存,C/C++把常量字符串放到单独的一个内存取余。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。 int main() { char str1[] = "hello world"; char str2[] = "hello world"; char* str3 = "hello world"; char* str4 = "hello world"; if(str1 == str2) printf("str1 and str2 are same.\n"); else printf("str1 and str2 are not same.\n"); if(str3 == str4) printf("str3 and str4 are same.\n"); else printf("str3 and str4 are not same.\n"); return 0; } str1和str2是两个字符串数组,我们会为它们分配两个长度为12个字节的空间,并把"hello world"的内容复制上去。这是两个初始地址不同的数组,因此str1和str2的值也不相同。 str3和str4是两个指针,我们无须为它们分配内存以存储字符串的内容,而只需要把它们指向"hello world"在内存中的地址就可以了。由于"hello world"是常量字符串,它在内存中只有一个拷贝,因此str3和str4指向的是同一个地址。 在C#中,封装字符串的类型System.String有一个非常特殊的性质:String中的内容是不能改变的。一旦试图改变String的内容,就会产生一个新的实例。 String str = "hello"; str.ToUpper(); str.Inser(0,"world"); 虽然我们对str做了ToUpper和Insert两个操作,但操作的结果都是生一个新的String实例并在返回值中返回,str本身的内容都不会发生改变,因此str最终的内容不变。由此可见,试图多次改变String的内容,改变之后的值只可以通过返回值得到。用String做连续多次修改,每一次修改都会产生一个临时对象,这样开销太大。为此C#定义一个新的与字符串相关的类型StringBuilder,它能容纳修改后的结果。

剑指offer学习读书笔记--二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序。请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数。 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 我们可以发现以下规律:首先选取数组右上角的数字。如果这个数字是要寻找的数字,则返回结果。若这个数字大于我们要寻找的数字,则去除这个数字所在的列;若这个数字小于我们要寻找的数字,则去除这个数字所在的行。也就是说如果查找的数字不在数组的右上角,则每一次都在数组查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围了,直到找到需要查找的数字或者查找的范围为空。 从另外一个角度看,从左下角的数字来看,如果这个数字大于查找的数字,则剔除该行,若这个数字小于查找的数字,则剔除该列。 bool Find(int* matrix,int rows,int cols,int num) { bool found = false; if (matrix != null && rows > 0 && cols > 0) { int row = 0; int col = cols - 1; while(row < rows && col >= 0) { if (matrix[row*cols + col] == num) { found = true; break; } else if(matrix[row*cols + col] > num) -- col; else ++ row; } } return found; }

剑指offer学习--实现单例模式

只能生成一个实例的类是为了实现单例模式的类型。 加同步锁前后两次判断实例是否已存在 我们只是在实例还没有创建之前加锁操作,以保证只有一个线程创建出实例。而当实例已经创建之后,我们已经不需要再做加锁操作了。 public sealed class Singleton { private Singelton() { } private static object syncObj = new object(); private static Singleton instance = null; public static Singleton Instance { get { if (instance == null) { locak(syncObj) { if (instance == null) instance = new Singleton(); } } return instance; } } } 利用静态构造函数 public seled class Singleton { private Singelton() { } private static Singleton instance = new Singleton(); public static Singleton Instance { get { return instance; } } } 由于C#中调用静态构造函数时初始化静态变量,.

latex算法步骤如何去掉序号

想去掉latex算法步骤前面的序号,如下 我想去掉每个算法步骤前面的数字序号,1,2,3,因为我已经写了step。我们只需要引用a lgorithmic这个包就可以了,代码如下: \usepackage{algorithmic} \begin{algorithm}[htb] \caption{SDE} \label{alg2} \begin{algorithmic} \STATE Step 1. Compute the covariance matrix $C$ of the current population, then apply Eigen decomposition to $C$ as follows: \begin{equation} \label{eve} C=EDE^T \end{equation} where $E$ is the eigenvector matrix of the population, $E^T$ is the corresponding transposed matrix. $D$ is a diagonal matrix composed of eigenvalues. \STATE Step 2. Compute the the projection of the population with eigenvector matrix $E$. \begin{equation} \label{proj} P=X_G\cdot{E} \end{equation} \STATE Step 3.

前端面试基础题目

行内元素有哪些?块级元素有哪些?CSS的盒模型? 行内元素:a b br i span input select 块级元素:div p h1 h2 h3 h4 form ul css盒模型:content border margin padding 前端页面由哪三层构成,分别是什么,作用是什么? 结构层:主要指DOM节点:HTML/XHTML 样式层:主要指页面渲染:CSS 脚本层:主要指页面动画效果:JS/AS CSS引入的方式有哪些?link和@import的区别是? 内联 内嵌 外链 导入 区别:同时加载 css选择符号有哪些 标签选择符 类选择符 ID选择符 标签上title和alt属性的区别是什么? alt当图片不显示用文字代表 title为该属性提供信息 什么是语义话的HTML? 直观的认识标签,对于搜索引擎抓取有好处 清除浮动的几种方式以及优缺点: 1 使用空标签清除浮动 clear:both(理论上可以清楚任何标签,缺点增加无意义的标签) 2 使用overflow:auto 3 使用afert伪元素清除浮动 IE和标准下有哪些兼容性的写法 var ev = ev || window.event document.documentElement.clientWidth || document.body.clientWidth var target = ev.srcElement || ev.target 闭包就是能够读取其他函数内部变量的函数 添加,插入,替换,删除,到某个节点的方法 obj.appendChildl() obj.innersetBefore() obj.replaceChild obj.removeChild

每日一练--直接插入排序

现在找工作的压力这么大,为了以后好找工作,现在开始要多看看算法,所以以后可以每天做个小题目,练习一下。今天作为第一天,说个最简单的直接插入排序。 直接插入排序可以这么理解,把A[j]和A[0]….A[j-1]的数进行比较,如果比他们小,就插入到比它小的前一位,直接插入排序的时间复杂度是O(n^2). 先给出伪代码分析 //the index of array is from 0 for j=1 to num.length key = num[j]; i = j-1; while i >= 0 and num[i] > key { num[i+1] = num[i]; i--; } num[i+1] = key; 下面用c++来实现 // insertsort.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<iostream> #include<stdlib.h> using namespace std; int main() { int num[10] = {10,20,1,78,34,99,12,21,2,55}; int key; cout << "the number has not been sorted:" << endl; for (int i = 0;i < 10;i++) { cout << num[i] << ' '; } cout << endl; cout << "the number has been sorted:" << endl; for (int j =1;j <10;j++) { int key = num[j]; int i = j-1; while(i >=0&&num[i]>key) { num[i+1] = num[i]; i--; } num[i+1] = key; } for (int m = 0;m < 10;m++) { cout << num[m] << ' '; } cout << endl; return 0; } 今天一练,到此结束。

differential evolution代码实例(DE算法)

DE算法是遗传算法中一种比较流行的算法,这种算法比较简单,速度也比较快,下面给出一份示例代码 clear all; close all; clc 2 %Function to be minimized 3 D=2; 4 objf=inline(’4*x1^2é2.1*x1^4+(x1^6)/3+x1*x2é4*x2^2+4*x2^4’,’x1’,’x2’); 5 objf=vectorize(objf); 6 %Initialization of DE parameters 7 N=20; %population size (total function evaluations will be itmax*N, must be >=5) 8 itmax=30; 9 F=0.8; CR=0.5; %mutation and crossover ratio 10 %Problem bounds 11 a(1:N,1)=é1.9; b(1:N,1)=1.9; %bounds on variable x1 12 a(1:N,2)=é1.1; b(1:N,2)=1.1; %bounds on variable x2 13 d=(béa); 14 basemat=repmat(int16(linspace(1,N,N)),N,1); %used later 15 basej=repmat(int16(linspace(1,D,D)),N,1); %used later 16 %Random initialization of positions 17 x=a+d.

github命令大全

github是一种开源的版本控制工具,现在已经得到很多人的应用。所以想介绍一下github的一些使用。 github安装 github提供了桌面客户端,我们也可以通过命令行的方式来进行控制。 windows https://windows.github.com mac https://mac.github.com 配置工具 对于本地版本配置用户信息 git config --global user.name "username" git config --global user.email "email" 上面的分别是设置用户名和邮箱 建立版本库 git init project-name //create a new local repost with the specified name git clone url //download a project and its entire version history 提交变化版本 git status // list all new of modified files to be committed git diff //show file differences not yet staged git add file //snapshot the file in preparation for versioning git diff --staged //show file difference between staging and the last file version git reset file //unstage the file, but preserve its contents git commit -m "description message" 群组版本控制 git branch //list all local branches in the current respority git branch branch-name //create a new branch git checkout branch-name //switch to the specific branch and update the working directory git merge branch //combine the specified branch's history into the current branch git branch -d branch-name //delete the specified branch 重构文件名 git rm [file] //delete the file from the working directory and stage the deletion git rm --cached [file] //remove the file from version control but pressure the file locally git mv [file-origin] [file-renamed] //change the file name and prepare it for commit 排除版本控制 *.

javascript的继承模式

在javascript里面看到javascript的继承模式和传统的继承模式是有区别的,就想查资料看一下到底有区别,就看到了这篇文章,觉得讲得还可以,暂时先放上来,以后有别的东西再补充: http://segmentfault.com/a/1190000000766541 基本模式 var Parent = function(){ this.name = 'parent'; }; Parent.prototype.getName = function(){ return this.name; }; Parent.prototype.obj = {a:1}; var Child = function(){ this.name = 'child'; } Child.protytype = new Parent(); var parent = new Parent(); var child = new Child(); console.log(parent.getName());//parent console.log(child.getName());//child 这种事最简单实现原型继承的方法,直接把父类的对象复制给子类的构造函数的原型,这样子类的对象就可以访问到父类以及父类构造函数的protytype 这种方法的优点就是实现起来比较简单,不需要任何特殊的操作;同时他的缺点也很明显,如果子类需要做跟父类构造函数中相同的初始化动作,那么就得在子类构造函数中再重复一遍父类中的操作: var Parent = function(name){ this.name = name || 'parent'; }; Parent.prototype.getName = function(){ return this.name; }; Parent.prototype.obj = {a:1}; var Child = function(name) { this.

css盒子模型设置的缩略形式

css里面的盒子模型里面设置padding,margin的上下或者左右的大小有很多方式,下面说说两种不同的方式: original method: padding-top:0px padding-right:20px padding-bottom:30px padding-left:10px new method: padding:0px 20px 30px 10px // top right bottom left respectively 同理: margin-top:0px margin-right:20px margin-bottom:30px margin-left:10px margin:0px 20px 30px 10px 如果上下左右的值都是一样的话,那我们可以这样设置: the old method: padding-top:20px padding-right:20px padding-bottom:20px padding-left:20px the new method: padding:20px 如果上下值和左右值分别一样呢: the old method: margin-top:0px margin-right:20px margin-bottom:0px margin-left:20px the new method margin:0px 20px // top and bottom right and left respectively border的属性设置: the old method border-width:thin border-style:solid boder-color black the new method: