算法
带翅膀的猫
天天写BUG的软件开发工程师~
展开
-
剑指Offer:替换空格
请实现一个函数,把字符数组中的每个空格替换为”%20”。例如输入”we are happy.”则输出”we%20are%20happy.” 原来的一个空格被替换为‘%’‘2’‘0’我们不能想当然的直接赋值字符,而必须将空格后面的所有字符都后移两个位置否则会覆盖原来的字符。时间复杂度为O(n^2)的解法,不足以拿到Offer在我们平常看到数组这玩意儿时我们总是从前往后遍历,同样在解答这题时原创 2018-01-20 18:15:06 · 3813 阅读 · 0 评论 -
剑指Offer:旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个已排序(由小到大)数组的一个旋转数组,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转数组,该数组的最小值为1。对于在数组中找最小数字的问题最容易想到也是最容易实现的就是遍历一遍,时间复杂度为O(n),但是这并没有利用旋转数组的特点(两部分增序排列),无法让面试官满意。拿题目中原创 2018-01-24 16:13:15 · 3786 阅读 · 0 评论 -
剑指Offer:数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。基于快排划分思想的时间复杂度为O(n)的解法      如果一个数字出现的次数超过一半,那么如果我们将数组排序后位于中间的就是那个出现次数超过...原创 2018-02-13 00:07:32 · 3842 阅读 · 0 评论 -
剑指Offer:最小的K个数
输入n个整数(不重复),找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则输出最小的4个数为1、3、2、4。解法一:O(n)的解法,但是会修改原数组      从面试题数组中出现次数超过一半的数字中受到启发,在该题中我们在寻找下标为n/2的数字,那么我们可以转变思路,找下标为k-1的数字,找到后该数左边的就...原创 2018-02-13 18:00:14 · 3890 阅读 · 0 评论 -
剑指Offer:连续子数组的最大和
输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值 。要求时间结复杂度为 O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10 -4,7, 2} ,因此输出为该子数组的和18。解法一:举例分析数组的规律      我们试着从头到..原创 2018-02-14 21:06:51 · 3892 阅读 · 0 评论 -
剑指Offer:把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321} ,则打印出这 3 个数字能排成的最小数字 321323.       最直接的方法就是求出这个数组的全排列,解法在剑指Offer:字符串的排列中详细介绍了,将全排列组成一个数字,再比较每个数字,得出最小值。n个...原创 2018-02-18 19:16:42 · 3928 阅读 · 0 评论 -
剑指Offer:丑数
我们把只包含因子 2、3 和 5 的数称作丑数 (Ugly Number)。求按从小 到大的顺序的第 1500 个丑数。例如 6、8都是丑数,但 14 不是,它包含因子 7。习惯上我们把 1当做第一个丑数。解法一:逐一判断是否是丑数,简单但是不够高效      数字n是数字m的因子说明m%n==0。丑数的因子只有2、3和5,说明一...原创 2018-02-19 22:07:21 · 3946 阅读 · 0 评论 -
剑指Offer:指定数字在排序数组中出现的次数
统计指定数字再排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在数组中出现了4次,输出4。使用二分查找法      由于数组是排序的我们应该很容易想到使用二分法查找指定数字。第一次查找中间值为3,等于我们要查找的数字,其他数字3可能在中间值的两侧,我们要查找到第一个3出现的位置和最后一个3出...原创 2018-02-25 16:26:15 · 3716 阅读 · 0 评论 -
剑指Offer:数组中只出现一次的数字
一个整型数组中除了两个数字之外,其他数字都是出现两次。请写程序这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。       例如数组{2,4,3,6,3,2,5,5},因为只有数字4和6这两个数字只出现了一次,其他数字都出现了两次,所以输出4和6。数组中只有一个数字是单独的,怎么解决?&nbsp原创 2018-02-26 23:20:23 · 3762 阅读 · 0 评论 -
剑指Offer:和为s的两个数字VS和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字 s,在数组中查找两个数,得它们的和正好是 s。如果有多对数字的和等于 s,输出任意一对即可。      例如输入数组 {1,2,4,7,11,15} 和数字 15。由于 4+11=15,因此输出4和11 。   &原创 2018-02-27 14:56:08 · 3842 阅读 · 0 评论 -
剑指Offer:扑克的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看出任意数字。      大、小王是特殊的数字,我们不妨把它 们都定义为 0,这样就能和其他扑克牌区分开来了。   &原创 2018-03-01 15:33:29 · 3759 阅读 · 0 评论 -
剑指Offer:数组中重复的数字
      在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。  &原创 2018-03-23 15:12:48 · 3803 阅读 · 0 评论 -
剑指Offer:构建乘积数组
给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1],不能使用除法。最直观的解法就是计算每一个B[i],每一次计算都要将A中除第 i 个元素外的所有元素相乘,则总的时间复杂度为O(n^2),这种解法不是最好的。构建矩阵解法我们将B[i]=A[0] x A[1]...原创 2018-04-01 22:08:14 · 3859 阅读 · 0 评论 -
剑指Offer:n个骰子的点数
把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。      每个骰子的点数为1~6,n个骰子的点数和最小值为n,最大值为6n,所以n个骰子的点数和s有6n-n+1种情况(例如2个骰子的点数和有:2、3、4、5、6、7、8、9、10、11、12。共6*2-2+1=11种)。另外根据排列组合n...原创 2018-02-28 22:58:40 · 4057 阅读 · 0 评论 -
剑指Offer:求1+2+...+n
求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch…case等关键字及条件判断语句(A?B:C)对于剑指Offer书上介绍的四种方法都是C++的解法,不适用于JAVA。使用短路原则实现的递归解法实现代码:private static int Solution(int n){ int result=n; boolean value ...原创 2018-03-19 11:01:03 · 3870 阅读 · 0 评论 -
递归经典--汉诺塔
//汉诺塔问题 #include<stdio.h>#include<stdlib.h>void Move(int n,char x,char y,char z){ if(n==1) { printf("%c---->%c\n",x,z);//最后一个盘子从 X 移动到 Z }原创 2017-01-17 18:42:36 · 3799 阅读 · 0 评论 -
迭代-买汽水问题
#include <stdio.h>int main(int argc,char *argv[]){ int num_Qi=20,num_Ping=0,Sum=0; Sum+=num_Qi; //初始状态:20元买20瓶汽水 do //迭代思想 { num_Ping=num_Qi;原创 2016-11-06 18:59:15 · 4144 阅读 · 0 评论 -
剑指Offer:二维数组查找
存在这样的一个二维数组,它的每一行都按照从左至右的递增顺序排序,每一列都按照从上至下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 在此二维数组中查找数字7,查找成功返回true;在此数组中查找数字5,查找失败返回false。如果你说遍历数组那就没意思了,这也谈不上什么好方法。必挂你!!算法思路原创 2018-01-19 11:25:31 · 3829 阅读 · 0 评论