
剑指offer
Jock.Liu
你以为失败的人生,也许是别人努力活着的结果!
展开
-
剑指offer||数组中重复的数字--在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:将输入数组排序,再判断相邻位置是否存在相同数字,如果存在,对 duplication 赋值返回,否则继续比较...原创 2019-11-29 22:02:57 · 741 阅读 · 0 评论 -
【剑指offer】链表的反转
题目:输入一个链表,反转链表后,输出新链表的表头。过程分析:节点类:public class ListNode { int val; ListNode next = null; ListNode() { this.val = val; }}实现类:public ListNode ReverseList(ListNode head) { if(he...原创 2019-06-24 21:01:25 · 246 阅读 · 0 评论 -
剑指offer||反转单词顺序(java)
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?分析:遇到空格就...原创 2019-07-08 00:19:21 · 429 阅读 · 0 评论 -
【剑指offer】调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析:1.定义两个链表,用链表分别存储奇数和偶数。 2.i从左向右遍历,将奇数存放给list1,将偶数寄存给list2,存放用add方法。 3.合并这两个链表,用addAll实现,即list1.add...原创 2019-06-23 14:36:32 · 231 阅读 · 0 评论 -
剑指offer||正则表达式表示数值的字符串
需求:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。分析:true:"+100""5e2""-123""3.1416""-1E-16"false:"12e"...原创 2019-06-26 10:19:21 · 287 阅读 · 0 评论 -
【剑指offer】用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
需求:用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:此题的突破口在n的个数数;n不一样,结果就不一样;由n来找规律。台阶数 跳法 1 1 2 2 3 3 4 5 5 8 6 13 ...... ...... 通过分析台阶数,...原创 2019-06-18 00:35:14 · 680 阅读 · 0 评论 -
【剑指offer】在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入这样的一个二维数组和一个整数,判断数组中是否含该整数
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时。右移要查找数字比左下角数字小时,上移。实现代码:public c...原创 2019-06-18 00:12:30 · 2501 阅读 · 1 评论 -
【剑指offer】一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
需求:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:此题的突破口在台阶数;台阶数不一样,结果就不一样;由台阶数来找规律。台阶数 跳法 1 1 2 2 3 4 4 8 5 16 6 32 ...... ...... 通过分析台阶数,可以...原创 2019-06-17 17:48:08 · 4088 阅读 · 2 评论 -
【剑指offer】合并两个排序的链表
题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。方法:节点类:public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}实现类:publi...原创 2019-06-25 12:49:47 · 273 阅读 · 0 评论 -
【剑指offer】给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
题目详述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。分析:1.指数为负数的时候先取反不然最高位为1会多乘一次,导致结果不正确,最后面的得数取倒数就可以了。 2.写出指数的二进制表达,例如13表达为二进制1101。 3.举例:10^1101=10。 4.通过&1和>>1来逐位读取1101,为1时...原创 2019-06-19 22:01:11 · 316 阅读 · 0 评论 -
【剑指offer】二进制中1的个数--输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示。
需求:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:首先,输入的是一个整数,我们需要知道它的二进制,进而判断它二进制中的1的个数。输出二进制的方法有三种: 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二...原创 2019-06-18 23:19:55 · 1069 阅读 · 0 评论 -
【剑指offer】输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:具体做法可以分为四步第一:输入一个复杂链表,返回结果为复制后复杂链表的head第二:根据原始链表的每个结点N创建对应的结点N'第三:设置复制出来结点的...原创 2019-06-07 22:59:48 · 2163 阅读 · 1 评论 -
【剑指offer】输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。举例:1 2 3 4 ;5 6 7 8实现代码package 牛客网;public class Test { public static class Merge { public static ListNode Merge(ListNode list1,Li...原创 2019-06-07 22:42:28 · 250 阅读 · 0 评论 -
【Java】题目:判断101-200之间有多少个素数,并输出所有素数。
需求:判断101-200之间有多少个素数,并输出所有素数程序分析:判断素数的方法:用一个数分别去除2到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。实现代码:public class primenumber { public static void main(String[] args) { int count = 0; for (int i ...原创 2019-06-13 19:48:22 · 13688 阅读 · 1 评论 -
【Java】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
需求:题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?分析:这是一个斐波那契数列数列问题同样,它的突破口在三个月之后开始,界定第一个月数目为1,第二个月也是1,从第三个月开始计算第一次出生的兔子数月份 对数 1 1 2 1 3 2 4 ...原创 2019-06-13 18:07:39 · 49139 阅读 · 20 评论 -
【Java】动态规划---青蛙跳台阶问题
什么是动态规划?动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一个子问题的解推出。动态规划和分治法相似,都是通过分解,求解,并组合子问题来求解原问题。分治法将问题划分成相互独立互不相交的子问题,递归求解子问题,再将它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。在这种情况下,分治算法会做出许多不必要的...原创 2019-06-13 17:53:39 · 4496 阅读 · 0 评论 -
【剑指off】替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。这里有两种方法可以实现循环匹配:public class Solution { public static void main(String[] agrs) { String str = "We Are...原创 2019-05-26 22:53:04 · 352 阅读 · 0 评论