- 博客(8)
- 收藏
- 关注
原创 希尔排序 C++ or Java
希尔排序其实就是改进版的插入排序。插入排序在处理原本有序数量少的组合时非常快,反之速度就比较慢。因此我们想让插入排序分组处理数据,让插入排序每次处理较少的值。我们可以每隔等长的数据为一组,然后逐渐改变这个间隔长度,使之逐渐减少。这样数组会逐渐变得有序,充分发挥插入排序的优点。下面请看代码: C++: void shell_sort(int a[], int length) { int gab = length >> 1; while (gab) { for (in
2021-10-10 13:43:11
68
原创 数的范围 (二分查找)
题目描述: 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式: 第一行包含整数 n 和 q,表示数组长度和询问个数。 第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。 接下来 q 行,每行包含一个整数 k,表示一个询问元素。 输出格式: 共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在该元素,则返回 -
2021-10-09 17:48:33
130
原创 验证二叉搜索树
题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 1. 节点的左子树只包含 小于 当前节点的数。 2.节点的右子树只包含 大于 当前节点的数。 3.所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:root = [2,1,3] 输出:true 示例 2: 输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。 **方法一:**递归法,下面请看代码:
2021-10-08 11:32:08
101
原创 合并k个升序链表
合并k个升序链表 题目描述: 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6 示例 2: 输入:list
2021-10-07 13:01:10
145
原创 2021-10-05
合并两个有序链表 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列 解决此题大致有两种方法一是迭代,把两个链表正常重新排序,然后返回合并后的链表。这个方法思路简单,代码比较长。下面请看代码:
2021-10-06 08:00:00
40
原创 2021-10-05
平衡二叉树 描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 注:我们约定空树是平衡二叉树。 数据范围:n<=100,树上节点的val值满足 0<=n<=1000 要求:空间复杂度O(1),时间复杂度 O(n) 示例1 输入: {1,2,3,4,5,
2021-10-05 12:15:58
47
原创 2021-10-04
最长无重复数组 题目描述 给定一个数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组。 数据范围:0<=val<=1000000 数据数量范围:0<=n<=100000 要求:时间复杂度O(nlogn),空间复杂度为O(n) 示例1 输入:[2,3,4,5] 返回值:4 说明:[2,3,4,5]是最长子数组 示例2 输入:[2,2,3,4,
2021-10-04 11:10:16
93
原创 2021-10-03
二分查找 题目描述: 请实现有重复数字的升序数组的二分查找 给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1。 示例1: 输入: [1,2,4,4,5],4 返回值: 2 说明: 从左到右,查找到第1个为4的,下标为2,返回2 示例2: 输入: [1,2,4,4,5],3 返回值: -1 要解决这一题我们要先学会二分查找,二分查找有两种方法,其一是递归法,二是非递归法。这里就不详述,
2021-10-03 08:00:00
75
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人