剑指Offer
爱学习的小时宜
这个作者很懒,什么都没留下…
展开
-
剑指Offer04:二维数组中的查找(解决matrix[0].length数组越界异常)
剑指Offer04:二维数组中的查找(解决matrix[0].length数组越界异常)1、题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],原创 2021-06-28 13:06:03 · 557 阅读 · 0 评论 -
剑指Offer系列之52:两个链表的第一个公共节点(相遇问题超好理解)
一、问题描述输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B原创 2021-04-06 22:38:31 · 161 阅读 · 0 评论 -
剑指Offer系列之25:合并两个排序链表(超简单解法)
一、题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4二、题目分析1、题目说到两个链表l1、l2都是递增的,因此可以迅速想到顺序遍历两个链表比较相同位置的值,取小值插入新链表再后移指针即可。所以我们这里采用双指针解法。2、具体思路 开始时新建一个链表dum,初始当前节点cur指向dum,判断l1.val和l2.val的原创 2021-04-04 19:43:11 · 156 阅读 · 0 评论 -
剑指Offer系列之21:调整数组顺序使奇数位于偶数前面
剑指Offer系列之21:调整数组顺序使奇数位于偶数前面一、题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。二、思路分析1、本题乍一看就是把数组分为两部分,前半部分放奇数,后半部分放偶数,自然就想到双指针解法,首尾指针分别指向数组的头和尾。2、接着我原本想到的方法是:(1)直接判断两个指针指向的值是否是偶原创 2021-03-19 22:17:44 · 70 阅读 · 0 评论 -
剑指Offer系列之57:和为s的两个数字(超简单双指针解法)
剑指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、题目中说到是递增数组,即可设原创 2021-03-18 21:08:00 · 117 阅读 · 0 评论 -
剑指Ofeer系列之03:数组中重复的数字(超简单解法)
剑指Ofeer系列之03:数组中重复的数字(超简单解法)一、题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3二、思路分析1、题目中说到数组中所有数字都在0~n-1范围内,且数组长度为n,所以数组如果没有重复数字的话,排序后几号索引下应该就是数字几。原创 2021-03-17 22:42:55 · 114 阅读 · 0 评论 -
剑指Offer系列之39:数组中出现次数超过一半的数(超简单思路分析)
剑指Offer系列之39:数组中出现次数超过一半的数(超简单思路分析)一、题目详细描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2二、思路分析1、首先题目假设数组非空,可以不考虑空数组情况,也可以在代码中加一句判别数组是否为空语句。2、需要求的数字出现次数超过数组长度一半,说明它比其他所有数字的出现次数都多(至少多一次),因此可以考虑给原创 2021-03-17 17:04:40 · 177 阅读 · 0 评论 -
剑指Offer系列之64:求1+2+...+n两行两行代码搞定
剑指Offer系列之64:求1+2+…+n两行代码搞定题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路使用等差数列求和公式计算:((首项+尾项)*项数)/2这个提交在leetcode上用时击败100%用户,内存击败83.97%用户。java代码如下class Solution { public int sumNums(int n) { int sum=((1+n)*原创 2021-03-17 12:13:23 · 86 阅读 · 0 评论