
数据结构与算法
sut_uestc
天道酬勤,保持学习的激情,坚持就是胜利!
展开
-
Bitmap算法简介
Bitmap算法中文又叫做位图算法。那么什么是Bitmap算法呢?位图算法中的位图是内存中连续的二进制位(bit),用于对大量整形数据做去重和查询。举个例子,给定一块长度是10bit的内存空间,想要依次插入整形数据4,2,1,3。我们需要怎么做呢?给定长度是10的bitmap,每一个bit位分别对应着从0到9的10个整型数。此时bitmap的所有位都是02. 把整型数4存入bitmap,对应存储的位置就是下标为4的位置,将此bit置为1。3. 把整型数2存入bitmap,对应存储的位置就是下标为2原创 2020-06-09 19:30:59 · 2117 阅读 · 0 评论 -
LeetCode84. 柱状图中最大的矩形(java实现)
LeetCode84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10...原创 2020-01-03 10:15:54 · 412 阅读 · 0 评论 -
LeetCode80. 删除排序数组中的重复项 II(java实现)
LeetCode80. 删除排序数组中的重复项 II给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, ...原创 2019-12-31 09:48:11 · 153 阅读 · 0 评论 -
LeetCode 79. 单词搜索(java实现)
LeetCode 79. 单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定...原创 2019-12-30 10:03:35 · 947 阅读 · 1 评论 -
Java实现八大排序算法
本文主要对常见的排序算法做一些总结,针对各种算法的应用场景以及时间空间度的分析。这部分也是在校招面试过程中常见的考点。常见的排序算法如下:直接插入排序希尔排序简单选择排序堆排序冒泡排序快速排序归并排序基数排序它们都属于内部排序,所谓内部排序就是排序的数据是在内存上的,这也就告诉我们,以上几种排序算法适用于数据量不大的情况下。它们之间的关系如下:稳定与非稳定如果一个排序算...原创 2019-12-21 10:59:57 · 195 阅读 · 2 评论 -
LeetCode74. 搜索二维矩阵(java实现)
LeetCode74. 搜索二维矩阵编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出:...原创 2019-12-20 10:27:15 · 206 阅读 · 0 评论 -
LeetCode 73. 矩阵置零(java实现)
LeetCode 73. 矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [...原创 2019-12-20 09:27:24 · 266 阅读 · 0 评论 -
LeetCode66. 加一(java实现)
LeetCode66. 加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示...原创 2019-12-19 10:30:48 · 233 阅读 · 0 评论 -
LeetCode 64 最小路径和(java实现)
LeetCode 64 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。解题思路:这个题目也是一看就是采用动态规划来解决。一般这...原创 2019-12-19 09:57:38 · 270 阅读 · 0 评论 -
LeetCode63. 不同路径 II(java实现)
LeetCode63. 不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?解题思路:这个题目和上一道题目解题思路是一模一样的,还是采用动态规划的算法来解决,不同的是其中有障...原创 2019-12-19 09:37:16 · 270 阅读 · 0 评论 -
LeetCode62. 不同路径(java实现)
LeetCode62. 不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达...原创 2019-12-18 10:24:18 · 118 阅读 · 0 评论 -
LeetCode56. 合并区间(Java实现)
LeetCode56. 合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5...原创 2019-12-18 10:01:29 · 696 阅读 · 0 评论 -
LeetCode 54 螺旋矩阵(java实现)
LeetCode 54 螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9...原创 2019-12-16 10:38:07 · 418 阅读 · 0 评论 -
LeetCode 53 最大子序和(java实现)
LeetCode 53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解题思路:采用动态规划的思想来求解这个问题比较好理解。注意题目要求求的是连续的子数组。利用dp[i]表示的是以nu...原创 2019-12-16 09:42:11 · 332 阅读 · 0 评论 -
LeetCode 48 旋转图像(java实现)
LeetCode 48 旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2]...原创 2019-12-15 19:28:44 · 197 阅读 · 0 评论 -
LeetCode 55. 跳跃游戏(java实现)
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索...原创 2019-12-14 11:01:50 · 655 阅读 · 0 评论 -
LeetCode 45. 跳跃游戏 II(java实现)
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。解题思路:从数组的第0个位置开始跳,跳的距离...原创 2019-12-14 10:40:06 · 384 阅读 · 0 评论 -
LeetCode42 接雨水(java实现)
LeetCode42 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路:...原创 2019-12-13 10:38:56 · 528 阅读 · 0 评论 -
LeetCode40 组合总和 II(java实现)
LeetCode40 组合总和 II给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。 示例 1:输入: candidates = [10,1,2,7,6,1,5], t...原创 2019-12-13 09:55:58 · 235 阅读 · 0 评论 -
LeetCode39 组合总和(java实现)
LeetCode39 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。 示例 1:输入: candidates = [2,3,6,7], target ...原创 2019-12-12 09:56:11 · 513 阅读 · 0 评论 -
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置(java实现)
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例...原创 2019-12-11 15:04:11 · 325 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组(Java实现)
LeetCode33 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5...原创 2019-12-11 09:55:05 · 288 阅读 · 0 评论 -
Leetcode 31 下一个排列(Java实现)
Leetcode 31 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1解题思路:这个题目比...翻译 2019-12-09 11:11:25 · 278 阅读 · 0 评论 -
LeetCode27 移除元素(java实现)
LeetCode27 移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并...原创 2019-12-09 10:12:54 · 510 阅读 · 0 评论 -
LeetCode26 删除排序数组中的重复项(Java实现)
LeetCode26 删除排序数组中的重复项给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出...原创 2019-12-08 19:52:33 · 464 阅读 · 0 评论 -
LeetCode 18 四数之和(java实现)
LeetCode 18 四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。解题思路:这个题的解题思路和之前的那个3数之和思路完全一样。不同的是这个题目是4个数,就是在原来3...原创 2019-12-07 12:11:32 · 231 阅读 · 1 评论 -
LeetCode16 最接近的三数之和(java实现)
LeetCode16. 最接近的三数之和给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).解题...原创 2019-12-07 11:13:41 · 238 阅读 · 0 评论 -
Leetcode15 三数之和(java实现)
Leetcode15 三数之和题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4]满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]...原创 2019-12-05 10:35:40 · 235 阅读 · 0 评论 -
LeetCode11 盛最多水的容器(java实现)
# LeetCode11 盛最多水的容器题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入: [1,8,6,2,5,4,8,3,...原创 2019-12-04 09:57:58 · 521 阅读 · 1 评论 -
LeetCode04 寻找两个有序数组的中位数(java实现)
LeetCode04 寻找两个有序数组的中位数(java实现)给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 1:nums1 = [1,...原创 2019-12-03 20:22:15 · 334 阅读 · 0 评论 -
LeetCode01 两数之和(java实现)
LeetCode1 两数之和题目描述给定一个整数数组 nums 和一个目标值target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KuqAZwjZ-1575276634574)(F:/%E6%9C%89%E9...原创 2019-12-02 16:52:05 · 179 阅读 · 0 评论