- 博客(6)
- 收藏
- 关注
转载 剑指Offer 11 旋转数组的最小数字
算法流程: 1.初始化:声明 lo , hi 双指针分别指向nums 数组左右两端; 2.循环二分:设 mid = (lo + hi)/2 为每次二分的中点("/"代表向下取整除法,因此恒有lo ≤ mid < hi ),可分为以下三种情况: 1.当nums[mid] > nums[hi]时: m一定在左排序数组中,即旋转点 x 一定在 [mid+1, hi] 闭区间内,因此执行 lo = mid + 1; 2.当nums[mid] < nums[hi]时: m一定在右排序数组中,即旋转
2021-10-04 09:18:43 51
转载 剑指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] ] 给定 target = 5,返回 true。 给定
2021-10-03 10:50:12 50
转载 剑指Offer 03 数组中重复的数字
使用哈希表(Set)记录数组的各个数字,当查找到重复数字则直接返回。 算法流程: 初始化: 新建 HashSet ,记为 dicdic ; 遍历数组 numsnums 中的每个数字 numnum : 当 numnum 在 dicdic 中,说明重复,直接返回 numnum ; 将 numnum 添加至 dicdic 中; 返回 -1−1 。本题中一定有重复数字,因此这里返回多少都可以。 复杂度分析: 时间复杂度 O(N)O(N) : 遍历数组使用 O(N)O(N) ,HashSet 添加与查找元素皆为 O(
2021-10-02 11:09:50 50
转载 剑指Offer 35 复杂链表的复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。 示例 : 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] 方法一:哈希表 利用哈希表的查询特点,考虑构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 nex
2021-10-01 17:35:30 58
原创 经典排序算法
文章目录一、选择排序二、插入排序三、希尔排序四、归并排序五、快速排序:六、堆排序 一、选择排序 算法描述: 首先找到数组中最小的元素,再将它与数组的第一个元素交换位置;再在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。它在不断的选择剩余元素中最小者,因此叫做选择排序。 优缺点: 1.运行时间和输入无关,为了找出最小的元素遍历一遍数组并不能为下一次遍历提供什么信息。一个排好序的数组所需的运行时间和随机顺序的数组运行时间一样长。 2.数据移动是最少的。选择排序用了N次
2021-10-01 13:00:24 59
原创 剑指Offer 24 反转链表
剑指 Offer 24. 反转链表 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL public class ReverseList { private class ListNode { int val; ListNode next; ListNode(int x)
2021-10-01 12:39:13 70
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人