- 博客(22)
- 收藏
- 关注
原创 面试题 第49题 丑数
剑指 Offer 49. 丑数 我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 题解: 一个动态规划问题,我们把前面的抽出记录下来,后面的丑数就是前面较小的丑数3, 5, 2得到的;使用三个指针p2,p3,p5,p2指向的数字下次2 ,p3指向的数字下次3,p5指向的数字下次5 ,我们从2p2 3p3 5p
2020-07-31 14:57:56 263
原创 面试题 第48题,最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你
2020-07-31 14:44:22 203
原创 剑指 Offer 20. 表示数值的字符串
剑指 Offer 20. 表示数值的字符串 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、“±5”、"-1E-16"及"12e+5.4"都不是。 题解: 按照字符串从左到右的顺序,定义以下 9 种状态: 开始的空格 幂符号前的正负号 小数点前的数字 小数点、小数点后的数字 当小数点前为空格时,小数点、小数点后的数字 幂符号 幂符号后的正负号 幂符号后的
2020-07-29 16:39:56 138
原创 剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n 求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1: 输入: n = 3 输出: 6 示例 2: 输入: n = 9 输出: 45 题解: 因为题目的限制迭代不可取,想到了递归, public static int sumNums(int n) { if(n == 1) return 1; n += sumNums(n - 1); retu
2020-07-28 21:05:01 173 1
原创 剑指 Offer 63. 股票的最大利润
剑指 Offer 63. 股票的最大利润 假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少? 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 示例 2: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大
2020-07-28 20:38:08 121
原创 剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 示例: 输入: a = 1, b = 1 输出: 2 无进位和 与 异或运算 规律相同,进位 和 与运算 规律相同(并需左移一位)。因此,无进位和 n 与进位 c 的计算公式如下; n=a^b; c=(a&b)<<1; a+b=n+c; 循环求n和c,直到c=0. public int add(int a, int b) {
2020-07-22 17:23:09 72
原创 剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子 题目描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。 示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True 思路: 利用set的特性,判断数组里没有重复的值,找到最大值和最小值,他们的差值小于5,就可以判定为顺子。因为大王小王可以代替任何值,在遇到大小王
2020-07-22 11:14:48 79
原创 剑指 Offer 第六题从尾到头打印链表(Java解法)
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 解法1:我首先想到的就是先遍历链表知道链表的长度,之后再遍历一次,然后把数值存入数组 Java代码: public static int[] reversePrint(ListNode head) { int i=0; ListNode node=head; while(node!=null) { node=node.next; i++;
2020-06-30 15:34:15 92
原创 剑指 Offer 第十五题二进制中1的个数(java 版本)位运算
剑指 Offer 15. 二进制中1的个数 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。 示例 2: 输入:00000000000000000000000010000000 输出:1 解
2020-06-30 14:54:44 112
原创 剑指 面试题 60.n个骰子的点数(Java实现)
剑指 Offer 60. n个骰子的点数 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 示例 1: 输入: 1 输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667] 示例 2: 输入: 2 输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667
2020-06-27 10:08:09 225
原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(Java代码实现)
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 提示: 1 <= nums.length <= 50000 1 <= nums[i] <= 10000 解法1: 暴力方法一遍历数组,遇到偶数移到数组最后一个,其他的依次向前移动,时间复
2020-06-26 22:36:31 135
原创 剑指 Offer 53-I. 在排序数组中查找数字 I(Java版本)
剑指 Offer 53-I. 在排序数组中查找数字 I 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 限制:0 <= 数组长度 <= 50000 解法1:暴力方法,遍历数组 public static int search(int[] nums, int target) { int c=0;
2020-06-26 20:57:34 217
原创 剑指 Offer 10_1 斐波那契数列(java代码实现)
剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:1 示例 2: 输入
2020-06-25 16:25:14 141
原创 剑指 Offer 10 青蛙跳台阶问题(java实现)
剑指 Offer 10 青蛙跳台阶问题(java实现) 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 示例 1: 输入:n = 2 输出:2 示例 2: 输入:n = 7 输出:21 提示:0 <= n <= 100 注意:n = 0 时输出 1 思路:找规律,发现:F(n) = F(n-1) + F(n-2) 解法:1:递归,但是会
2020-06-25 16:18:56 113
原创 剑指Offer 42.连续子数组的最大和(Java实现)
剑指 Offer 42. 连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 思路:分析题目,要求子数组最大和,而且时间复杂度为O(n),那么从第一个数字开始累加,如果加到某一个数字时,前面的累加和为负数,说明不能继续加了,要从当前数字重新开始累加。在
2020-06-23 20:50:35 155
原创 剑指Offer 25. 合并两个排序的链表__java
剑指 Offer 25. 合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解1:比较两个链表节点的数值,用一个节点去连接它们,最后返回 代码如下: public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null&
2020-06-23 20:39:21 91
原创 剑指Offer 11.旋转数组的最小数字__java
剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 ...
2020-06-23 20:29:27 141
原创 剑指Offer 4.二维数组中的查找(4)__java
剑指 Offer 04. 二维数组中的查找 题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定
2020-06-23 16:21:01 153
原创 剑指Offer 3.数组中重复的数字(3)__java
剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 解1:先给数组排序,之后如果有两个挨着的位置上的数字相同,那么该数字就是重复的,题目要求输出任意一个重复数字即可,找到之后就可以停止,Java代码如下: public st
2020-06-23 15:16:39 219
原创 L-011A-B (java)
L1-011 A-B 本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。 输入格式: 输入在2行中先后给出字符串A和B。两字符串的长度都不超过10的四次方 ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。 输出格式: 在一行中打印出A−B的结果字符串。 输入样例: I love...
2020-02-06 14:34:24 1074 6
原创 用队列实现栈
用队列实现栈的push ,pop,top,empty函数 队列是先进先出,而栈是先进后出,写push函数的时候,每次新入队的元素都放到最前面,出战的时候只要获取到队列最前面的一个 void push(int x) { num.push(x); //将前面的size-1个元素放到后面去 for(int i = 0; i < num.size() - 1; i++){ ...
2019-10-29 22:34:03 63
原创 单链表
1.删除节点 方法: 假设链表的结构为1->2->3->4->5,如果想要删除第三个节点,那么先用第三个节点的下一个节点的数据部分覆盖掉第三个节点的数据,链表变成:1->2->4->4->5,然后让第三个节点的next指针指向他的下一个的下一个节点,这里即为第三个节点指向第五个节点,第四个节点被回收清除。 Java代码 public static v...
2019-10-24 20:24:24 103
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人