- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数 暴力求解方法虽然简单,但是时间复杂度太高。剑指offer上有如下代码:int ThreeMin(int a, int b, int c){ int result = a<b?a:b; resu
2015-10-06 15:58:25
411
转载 Magic Index 分析
给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] = i。假设A中的元素递增有序、且不重复,请给出方法,找到这个Magic Index。更进一步,当A中允许有重复的元素,该怎么办呢?没有重复元素的情况一些同学在遇到这个题目的时候,往往会觉得比较简单。扫描一遍,不就ok了么?O(n)的。很简单呀。可是,大家要注意到,还有一个条件没有用:A中
2015-10-06 14:52:27
622
转载 《编程之美》小飞的电梯调度算法
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法: 由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应
2015-10-06 11:36:03
670
原创 一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n)
思路: 设置三个标记指针,pos0,pos2,cur 令pos0从前往后遍历,指向第一个非0的位置,pos2从后往前遍历,指向第一个非2的位置 然后cur从pos0开始往后遍历: 遇到0就和pos0交换,pos0++; 遇到1什么也不做; 遇到2就和pos2交换,pos2向前滑动到下一个非2的位置,交换后还要重新检查cur的值; 直到cur与pos2相遇。 一次遍历,复杂度是O(n)
2015-10-06 10:03:42
5057
1
转载 八皇后问题--递归和非递归
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。这个问题简化描述就是:在8x8的棋盘上放8颗子,要求它们【不在同一行】【不在同一列】【不在同一斜线】上。面对问题,我们
2015-10-05 15:59:20
549
原创 剑指offer--字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 上代码:class Solution {public: void permute(string prefix, string str, vector<string> &v1){
2015-10-05 11:11:39
348
转载 C++ map容器 按照value值排序
正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢?有两种方法:**方法1. 将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序,其中map_verb存放我的map值: 存放我的map值:**#include<algorithm>typedef pair<stri
2015-10-04 17:19:48
647
转载 三种工厂模式的C++实现
三种工厂模式的C++实现:SoapBase, SFJ,XSL,NAS等 http://blog.csdn.net/silangquan/article/details/20492293
2015-10-04 11:16:05
375
转载 C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static静态
2015-10-03 22:13:46
339
转载 如何限制对象只能建立在堆上或者栈上
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步,第一
2015-10-03 20:28:40
632
转载 旋转有序数组的二分查找
总结规律,简化模型 题目都不难,重要的是很敏锐的发现问题的规律。旋转有序数组的二分搜索,如 int arr[N] = {15,16,19,20,25,1,3,4,5,7,10,14}; 查找X = 5 主要思想: 每次根据L和R求出M后,M左边[L, M]和右边[M+1, R]这两部分中至少一个是有序的。 arr[M]和X比较 (1). arr[M]==X,返回M (2). arr[
2015-10-03 19:11:36
729
原创 最长不下降子序列的O(n)算法
最长不下降子序列(LIS:Longest Increasing Subsequence) 问题描述:给出n个数,求出其最长不下降子序列的长度,比如n=5,5个数是{4,6,5,7,3};其最长下降子序列就是{4,6,7},长度为3。 看了好多网上的算法一般的都是O(N^2), 最好的是O(NLogN). 我想到一个能在O(N)的时间内解决这个问题。 具体方案如下: 该问题可以转换为剑指off
2015-09-02 20:00:39
2217
2
转载 关于memset函数
今天突然发现memset的原理,如memset(p,0,sizeof(p)),这句话特别常见,讲所有的元素初始化为0,但是memset(p,1,sizeof(p)),却是将所有的元素初始化为16843009,以前也知道不能初始化为1,但是原因就不得而知了。那天研究别人代码,发现一句相当于是memset(p,243,sizeof(p))的语句,却是把整个数组赋值为-202116109,我十分不解。。本
2015-09-01 10:31:31
1382
转载 求字符串中最长无重复字符的子串
题目:求一个字符串中最长的没有重复字符的子串。 例如字符串“abcdaefgh” 使用hash表记录是否之前的字符出现,具体代码如下://O(N^2)的时间复杂度int max_unique_substring2(char * str) { int i,j; int begin; int maxlen = 0; int hash[256]; int n
2015-09-01 10:28:04
597
原创 字符串全排列
字符串全排列问题:给定字符串S,生成该字符串的全排列。方法:依次从字符串中取出一个字符作为最终排列的第一个字符,对剩余字符组成的字符串生成全排列,最终结果为取出的字符和剩余子串全排列的组合:#include <iostream>#include <string>using namespace std;void permute(string prefix, string str){ if
2015-08-29 12:02:08
641
原创 给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。如题,给定一个奇数n,然后填充n*n的矩阵方格,使得矩阵中的每行、每列、斜对角线的和均相等。并且填的数字都不同,且正好为[1, n*n]之间的整数。 该题的大致思路是这样的: 以n等于3为例,首先将第0行第1列填充为1,然后向右向上逐渐递增填写数字。具体代码如下:void nineGongGe( int
2015-08-17 09:51:39
4535
原创 大数乘法
大数乘法 一般来说涉及到大数的,都会先将其转换为字符串,然后根据进行对应的字符串运算,最后再将结果输出。#include<iostream>#include<string>using namespace std;int bigMultiply();int main(){ char str1[1000],str2[1000]; int i,j,len1,len2,len;
2015-08-12 19:33:29
886
原创 KMP小计
KMP之前一直困扰了好久,说抽时间搞明白也是一直没时间,现在有点明白,但又时间太紧,所以仅记个大概来,方便我自己以后回顾。KMP之所以效率比较高,是因为模式串中有重复的元素。设S为主串,则要匹配的模式串就是T串。也就是说T串中有重复的元素,比如: T = “abababc” 可以看出abababc中有重复的串,即前四位abab与从第2-5位的串是一样的(从0开始) 则根据其他参考资料,T的nex
2015-08-12 15:27:35
357
原创 最长重复子串,最长公共子序列, 最长公共子串
最长重复子串,最长公共子序列, 最长公共子串原题:首先这是一个单字符串问题。子字符串R 在字符串L 中至少出现两次,则称R 是L 的重复子串。重复子串又分为可重叠重复子串和不可重叠重复子串,这里只是简单讨论最长可重叠的重复子串,给出基本算法。最长重复子串 用最笨的方法,逐个扫描,时间复杂度O(N^2), 代码如下,亲测可用:int LCS::comLen(const char*p, const c
2015-08-11 20:26:33
1125
转载 宏定义(const)和常量定义(#define)的区别
宏定义(const)和常量定义(#define)的区别(转载)1.效果-《高质量C++/C编程指南》C++ 语言可以用const 来定义常量,也可以用#define 来定义常量。但是前者比后者有更多的优点: (1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。 (
2015-07-27 18:47:36
569
转载 稳定排序和不稳定排序(转载)
稳定排序和不稳定排序(转载)首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就 是这样
2015-07-27 16:21:42
326
原创 数组中只出现一次的数字
数组中只出现一次的数字题目:一个整形数组中除了两个数字之外,其他的数字都出现了两次。请写程序找出只出现一次的数字。要求时间复杂度O(n),空间复杂度O(1)。 - 思路: 原来有个题目是所有的数字都是两个,只有一个数字只出现了一次。而这个题目的思路就很容易了,让数组中的每个数字进行异或。异或能够满足交换律,并且a^a = 0, 0^a = a, 所以,很明显所有成对相同的数字经过异或之后都变成
2015-07-23 10:30:09
1273
原创 Kaggle-ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
在按照教程一步一步做的时候,出现如下错误:ValueError: Input contains NaN, infinity or a value too large for dtype('float32').解决办法:https://www.kaggle.com/c/word2vec-nlp-tutorial/forums/t/11266/valueerror-array-
2015-06-24 21:32:47
15622
1
转载 斐波那契数列的各种算法实现
斐波那契数列,但凡学过编程的童鞋们应该都懂,背景就不介绍了(就是大兔子生小兔子的故事),无论是面试还是实际的运用,常见的一个思路就是先用最先基本的办法实现,然后根据实际要求,一步步改进,优化算法效率。今天就以斐波那契数列这个大家都很熟悉的为例来小小感受一下。Version 1long Fibonacci(int n) { if (n == 0) return 0;
2015-05-27 22:50:08
624
原创 自己动手写字符串比较函数strcmp()
最近用到了字符串比较的函数,用到strcmp函数。除了知道怎么用之外,我觉得有必要把它的源码搞一搞。搜到网上流传的strcmp函数的源码是如下:int strcmp (const char * src, const char * dst){ int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(u
2015-05-13 10:50:04
1586
原创 不用加号实现加法!
有一个题目说的是如何不用加号来实现加法运算,看到了一个大牛的代码,顿时膜拜!废话不说,上思路。比如,int a =7, int b=8; 如何不用加号来计算a+b?代码如下:int Add(int a, int b){char *c = (char *)a;return (int) &c[b];}就是这么简单的两句代码。具体的意思就是:1、首先将a转换为地址类型,即a=7,
2015-04-24 21:08:53
8272
1
原创 01背包问题
01背包问题是一个经典 的动态规划的问题,现在再拿出来分享一下。具体的,背包问题一个例子来说就是:现在假设你有个背包,容量是只能装下重量为V=10kg的物品,现在桌子上有若干物品,但是不能把物品拆开拿走。假设现在有四种物品,wt={5,4,6,3}kg, 价值分别是val={10,40,30,50}。问题是在背包容量一定的情况下,应该如何拿物品,使得背包中的物品的总价值最大。那么该如何求解
2015-04-05 10:11:01
536
原创 Leetcode--Reverse Bits
Reverse bits of a given 32 bits unsigned integer.For example, given input 43261596 (represented in binary as 000010100101000001111010011100), return 964176192 (represented in binary as 00111001011
2015-03-16 21:39:02
342
原创 Leetcode--Number of 1 Bits
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).For example, the 32-bit integer ’11' has binary representation 00000000000
2015-03-16 20:14:56
345
转载 阿里笔试之最长公共子串
题目描述:给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如,query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。思路:用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹
2015-03-16 19:54:25
398
原创 Leetcode--Find Peak Element
Find Peak Number:A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ num[i+1], find a peak element and return its index. The array may contain mu
2015-02-12 05:46:10
346
原创 Leetcode-- Sort Colors
Sort Colors原题:Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use
2015-02-09 23:16:28
357
原创 Leetcode--Find Minimum in Rotated Sorted Array
Find Minimum in Rotated Sorted Array原题:Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You
2015-02-09 20:17:43
302
原创 Leetcode-- Majority Elemeny
Majority Element原题:Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.You may assume that the array is non-empty an
2015-02-08 21:26:10
386
原创 Leetcode--Maximum Subarray
Maximum Subarray原题:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.解决思路:设置两个变量,sum和maxSum。令sum和maxSum开始都为A[0]. 逐个扫描数组,不断累加到sum中,若sumclas
2015-02-07 21:18:37
312
原创 Search Insert Position Leetcode 非二分查找法
Search Insert Position--Leetcode开始没想到使用二分查找,就直接用的if else比较 low的做法,看运行时间还不算是最慢的,贴出来供以后查看。class Solution {public: int searchInsert(int A[], int n, int target) { for(int i=0;i<n;++i)
2015-02-06 22:39:43
359
原创 leetcode Single Number以及扩展
Single Number给定的数组中所有元素均出现两次除了某一个元素为一次,在时间复杂度限定线性O(n)以及空间复杂度为O(1)的情况下,找出出现次数为1的元素。在解题过程中,主要用到了位运算的异或运算:任何数字异或本身为0,且0^a == a.异或运算还满足交换律,即a^b == b^a;在了解这些原理之后就可以顺利解决该题。具体代码如下:int singleNumber(int
2015-01-30 15:59:11
352
转载 Leetcode: Largest Number
Given a list of non negative integers, arrange them such that they form the largest number.leetcode上的一道给定一个整形数组然后求其怎样进行组合才能得到一个最大的值,由于可能太大,会导致溢出,要求返回string类型而非整形。下面是我的刚开始的想法:拿例题来说,给定一个数组[3,30,34,5
2015-01-30 13:28:37
383
绘图完结版
2011-10-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人