![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
oj..
执子手 吹散苍茫茫烟波
这个作者很懒,什么都没留下…
展开
-
剑指offer22-链表中倒数第k个节点
一.题目描述输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.二.题目解析public ListNode getKthFromEnd(ListNode head, int k)原创 2021-08-07 22:19:15 · 70 阅读 · 0 评论 -
剑指offer面试题57题目二-和为S的连续正数序列
一.题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5二.题目解析1.滑动窗口public int[][] findContinuousSeque转载 2021-07-18 21:57:52 · 78 阅读 · 0 评论 -
剑指offer面试题57题目一-和为S的数字
一.题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i] <=原创 2021-07-18 20:37:47 · 110 阅读 · 2 评论 -
剑指offer面试题56题目二-数组中唯一只出现一次的数字
一.题目描述在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31二.题目解析1.hashmappublic int singleNumber(int[] nums) { /*has原创 2021-07-17 22:42:23 · 118 阅读 · 1 评论 -
剑指offer面试题56题目一-数组中只出现一次的两个数字
一.题目描述一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums.length <= 10000二.题目解析1.直观解法,但是不满足题目空间复杂度要求public int[]原创 2021-07-17 21:20:14 · 123 阅读 · 1 评论 -
剑指offer面试题53题目三-数组中数值和下标相等的元素
一.题目描述假设一个单调递增的数组里每个元素都是整数且唯一。编程实现函数找出数组中任意一个数值等于其下标的元素。例如在数组{-3,-1,1,3,5}中,数字3和下标相等二.题目解析1.暴力法遍历public int find(int[] nums){ /*暴力法,时间复杂度O(n)*/ if(nums == null || nums.length == 0){ return -1; } for (int i =原创 2021-07-14 21:12:30 · 75 阅读 · 0 评论 -
剑指offer面试题53题目二-0-n-1中缺失的数字
一.题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8限制:1 <= 数组长度 <= 10000二.题目解析public int missingNumber(int[] nums) { /*for循环遍历,利用0-n-1递增原创 2021-07-14 20:45:49 · 106 阅读 · 0 评论 -
剑指offer面试题53题目一-在排序数组中查找数字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 int search(int[] nums, int target) { /*时间复杂度O(n),空间复杂度O(1) * */原创 2021-07-13 07:20:17 · 123 阅读 · 1 评论 -
剑指offer面试题49-丑数
一.题目描述我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。二.题目解析1.直观的解法,缺点是对于非丑数也做了大量计算public int nthUglyNumber(int n) { /*超时*/ int i = 0;原创 2021-07-12 21:16:06 · 127 阅读 · 1 评论 -
剑指offer面试题42-连续子数组的最大和
一.题目描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100二.解题思路1.暴力法class Solution { public int maxSubAr原创 2021-07-08 22:03:21 · 101 阅读 · 0 评论 -
剑指offer面试题39-数组中出现数字超过一半的数字
一.题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000二.解题思路1.排序后for循环遍历,找到连续出现次数大于数组长度一半的数即返回...原创 2021-07-08 20:44:58 · 102 阅读 · 1 评论 -
剑指offer04-二维数组中的查找
一.题目描述在一个 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]]给定 target = 5,返回 true原创 2021-07-07 21:51:04 · 73 阅读 · 1 评论 -
剑指offer面试题21-调整数组顺序使奇数位于偶数前面
一.题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。二.解题思路1.辅助数组法class Solution { public int[] exchange(int[] nums) { /*1.辅助数组法 时间复杂度O(n),空间复杂度O(n) * */ if(nums == null || nums.length == 0){ r原创 2021-07-07 20:42:56 · 83 阅读 · 0 评论 -
剑指offer面试题11-旋转数组的最小数字
一.题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。二.解题思路1.常规解法:for循环遍历public int minArray(int[] numbers){ /* * 时间复杂度O(n),空间复杂度O(1) * */ if(numbers == nul原创 2021-07-04 21:57:30 · 96 阅读 · 3 评论 -
剑指offer面试题10-斐波那契数列&青蛙跳台阶问题
一.题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。(0 <= n <= 100)二.解题思路1.递归pub原创 2021-07-04 19:43:51 · 209 阅读 · 1 评论 -
剑指offer面试题3-数组中重复数字
一.题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。二.题目解答有三种解法:package exercise1;import java.util.Arrays;import java.util.HashSet;import java.util.Set;/** * offer02 在一个长度为 n 的数组 nums 里原创 2021-07-03 20:12:59 · 77 阅读 · 0 评论