自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 lintcode之不同子序列数 + 序列II

不同子序列:很明显是dp, 当位置相等的时候,等于f(i - 1, j - 1) + f(i, j - 1 )否则就是f(i, j - 1)子序列:找打第一个相邻升序,从后向前找到第一个大于的,交换,排序

2016-04-27 00:03:59 542

原创 lintcode之快速幂

利用乘积的模等于模的乘积再取模的性质(很好证明)同时利用幂运算的分解特性

2016-04-25 22:48:53 248

原创 编程之美之从无头单链表中删除节点

`1.将data转移 2.将next重置 3.删除节点 4.将指针置为空

2016-04-23 22:25:46 265

原创 编程之美之字符串移位包含的问题

s2出现在s1经过移位得到的字符串中充要条件是s2出现在S1S1中自己写几个样例就很容易理解了

2016-04-23 21:48:36 294

原创 编程之美只有加法的面试题

1:枚举个数(个数的大小是有限的,可以进行放缩)num=i + i+1 + i+2 + ....+ i+k-1  一共有k个数。= (i + i+k-1)*k/2=(2*i+k-1)*k/2=k*(i+ (k-1)/2)=k*i + k*(k-1)/2判断条件: num%(k*(k-1)/2)==0 或者 2*num>k*(k-1) 得: ki=num/k;可得出i

2016-04-23 21:24:32 250

原创 编程之美区间重合判断

主要是首先要进行区间的合并(排序 + 遍历),然后进行二分查找即可

2016-04-23 21:10:05 270

原创 编程之美之数组分割

无序数组,分割成为两个子数组,使得子数组之间的和最接近问题转换为从2n个数中找出n个,使得他们的和最接近总体和的1/2利用dp记录在前t个数中随机取i个的所有的可能的和即可,然后遍历,这样会出现指数级别可以利用遍历可能的和的值,查询在该值在前面是否出现,这样会将复杂度降低到多项式级别

2016-04-23 21:00:47 410

原创 数组循环移位

有一部分的顺序是不会发生改变的,所以实际上就是交换数组的两部分可以通过两次部分逆序和一次总体逆序来实现注意移位之前先进行取模操作来避免不必要的操作

2016-04-23 20:40:45 395

原创 最长递增子序列

1.直接dp2.dp + 按照当前已有长度进行二分枚举  nlogn

2016-04-23 20:35:46 190

原创 编程之美之子数组和的最大值(二维)

枚举行边界,此时退化成一维,直接按照一维来做

2016-04-23 20:17:57 263

原创 编程之美之子数组的最大值

直接贪心,复杂度O(n)

2016-04-23 20:11:53 201

原创 编程之美之子数组的最大乘积

空间换时间,记录左右乘积两个数组,然后进行一次遍历时间复杂度O(n)

2016-04-23 20:11:02 199

原创 编程之美快速寻找满足条件的两个数

就是2sum问题,直接排序加两个指针

2016-04-23 20:06:37 245

原创 编程之美之寻找最近点对

分治的思想首先,按照一个x进行分块,尽量保证左右差不多相等然后求出最小,划分,在2m * m的块中至多有八个,直接解决

2016-04-23 20:02:15 339

原创 编程之美之寻找数组中的最大和最小值

1.直接比较2n2.分治,1.5n同理的问题:求出N个数的数组中的第二大数

2016-04-23 19:46:22 333

原创 编程之美斐波那契数列

1.常规递归2.进行二次矩阵分解,然后利用求指数的方法,分解为按照指数的二进制来求解

2016-04-23 19:38:16 277

原创 编程之美之找到符合条件的数

给定N,找到最小的M,使得N*M的十进制表示中只有1,0将问题转换为在所有的只有1,0组成的数中寻找最小的一个能整除N的数即可为了避免枚举2^k的情况,将2^k的空间按照余数分解成为N-1个区间,记录每个空间中的最小数即可,这样可以让得到的数是最小书上的代码很清晰,直接看就能懂很赞.这道题目主要学到的思想还是问题转换和空间分割

2016-04-23 19:12:21 313

原创 编程之美最大公约数

1.辗转相除(对于数比较大的时候,会耗时比较高)2.变成相减,利用x - y,y和x,y有相同的最大公约数3.2虽然降低了运算的复杂度,但是很明显增加了迭代次数利用f(x,y)  =  f(p*x1, y) = f(x1, y)即可,其中P是素数,并且y不能整除P最简单的直接利用2作为素数P, 可以利用位运算复杂度 O(log2(max(x,y)))

2016-04-23 18:33:51 217

原创 编程之美精确表达浮点数

首先数表示为整数 + 小数小数分为有限小数和无限小数对于有限小数就很简单直接 a / 10^n对于存在无限循环小数的情况:x = (a + 0.bbbb) / 10 ^n10 ^m * 0.bbb = bbb + 0.bbb;即可解出0.bbb再带入即可 然后进行约分,也就是需要求最大公约数

2016-04-23 17:19:01 354

原创 编程之美之第k大数

1.排序2.快排3.对可选的值进行二分4.堆排(最小堆,每个数据只需要便利一遍,适合数据量很大不能一次性读入内存中的情况)

2016-04-23 16:06:24 268

原创 编程之美之发帖水王

就是一个摩尔投票的过程这个时候不需要进行排序,直接进行,复杂度是O(n)扩展:找出其中三个发帖数目超过1/4的人的ID,直接变成3个的摩尔投票先处理是空的状态,但是同时注意不能出现一个ID放在了两个中的状态

2016-04-23 10:46:59 184

原创 编程之美之阶乘

5的个数决定0的个数,2的个数决定二进制中最后一个1的位置(判断一个数是不是2的方幂)

2016-04-23 10:09:24 232

原创 编程之美之求二进制中1的个数

复杂度为t次,t为1的次数while (n){cnt++;n = (n - 1) & n;}很好理解

2016-04-22 21:24:24 244

原创 编程之美

再过几天就要面试微软的实习,今天开始再过一遍编程之美,之前也看过一部分,但是没有看完,也没有系统的总结。现在开始认真的看,系统总结下

2016-04-22 21:11:46 180

原创 lintcode删除排序数组中的重复数字 II

很简单不贴代码了和之前那个思想很类似

2016-04-21 22:08:55 341

原创 lintcode之数组划分

题目:给出一个整数数组nums和一个整数k。划分数组(即移动数组nums中的元素),使得:所有小于k的元素移到左边所有大于等于k的元素移到右边返回数组划分的位置,即数组中第一个位置i,满足nums[i]大于等于k。解答:两个指针交换注意边界和只在l class Solution {public: in

2016-04-21 21:59:52 348

原创 lintcode之两数之和

题目:给一个整数数组,找到两个数使得他们的和等于一个给定的数target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是1到n,不是以0开头。解答:hash + 排序 + two pointers,注意数是可能重复的class Solution {public: /* * @p

2016-04-21 20:56:01 992

原创 leetcode之三数之和 II

题目:给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和解答:two pinters实现,很简单class Solution {public: /** * @param numbers: Give an array numbers of n integer * @param target: An in

2016-04-20 23:34:53 384

原创 lintcode之 数组剔除元素后的乘积

题目:给定一个整数数组A。定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法。解答:保存一个左数组和右数组即可class Solution {public: /** * @param A: Given an integers array A

2016-04-20 18:45:13 275

原创 lintcode之 合并排序数组 II

题目:合并两个排序的整数数组A和B变成一个新的数组。你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。解答:倒过来进行添加,正着添加可能需要移位,会比较麻烦class Solution {public: /** * @param A: sorted integer array A which has m elements,

2016-04-20 18:21:37 2835

原创 lintcode之删除排序数组中的重复数字

题目:给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。解答:很明显的用两个指针即可class Solution {public: /** * @param A: a list of integers * @return

2016-04-19 11:58:26 210

原创 lintcode 之子数组之和

题目:给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置解答:同时用一个hash来记录每一个sum对应的下表,只要出现相同的sum,他们之间的这一部class Solution {public: /** * @param nums: A list of integers * @return: A list of in

2016-04-17 11:19:52 273

原创 lintcode之转换字符串到整数

题目:实现atoi解答:此题是细致题,需要考虑到各种情况,比如去除空前缀,去除0前缀,处理非0-9字符,处理小数点等class Solution {public: /** * @param str: A string * @return An integer */ int atoi(string str) { // w

2016-04-16 21:20:22 363

原创 lintcode之最长公共前缀

题目:给k个字符串,求出他们的最长公共前缀(LCP)解答:这道题做法应该很多,可以用trie树,也可以直接枚举我是用二分+测试做的,找到最短的那个字符串,二分枚举长度,然后测试class Solution {public: /** * @param strs: A list of strings * @return: The longest

2016-04-16 20:30:53 300

原创 lintcode 之 最长公共子串

从今天开始来做lintcode 这道题目就是简单的dp 就不写了 只是立个flag开始做lintcode了恩 就这样

2016-04-16 19:49:10 305

原创 leetcode之largest number

题目:Given a list of non negative integers, arrange them such that they form the largest number.For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.Note: The result

2016-04-16 15:59:34 280

原创 leetcode之longest palindromic substring

题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.解答:1.直接dp

2016-04-12 15:19:13 160

原创 leetcode之Find the Duplicate Number

题目:Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate n

2016-04-12 11:10:28 182

原创 leetcode之GaryCode

解答:很简单,利用n位的和n + 1位的关系,在n位的偶数位先入再入+1,奇数位置先入+1,再入自己

2016-04-02 23:30:16 352

空空如也

空空如也

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

TA关注的人

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