
数组
CodersCoder
有人见星辰,有人见尘埃。
展开
-
算法--寻找两个正序数组的中位数
描述给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5分析及代码参考:https://leetcode-cn.com/p原创 2020-09-14 18:22:03 · 258 阅读 · 0 评论 -
算法--只出现一次的数字
描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4分析使用map,进行两次for循环,即可实现class Solution { public int singleNumber(int[] nums) { Map<Integer, I原创 2020-09-12 18:26:43 · 102 阅读 · 0 评论 -
算法--爬楼梯
描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶 示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶分析本问题其实常规解法可以分成多个子问题,爬第n阶楼梯的方法数量,等于 2 部分之和。爬上原创 2020-09-02 18:54:34 · 406 阅读 · 0 评论 -
算法--加一
描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。分析1.0为特殊值,单独操作,遇 0赋 12.在末位不为 9时,给末位数值 + 1即可。3.末位为 9时原创 2020-08-29 22:06:01 · 218 阅读 · 0 评论 -
算法--最长回文子串
描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。回文串的定义:正着和反着读一样,那我们是不是把原来的字符串倒置了,然后找最长的公共子串就可以了。例如 S = “caba” ,S = “abac”,最长公共子串是 “aba”,所以原字符串的最长回文串就是 “aba”。作者:windliang链接:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang-xi-t原创 2020-08-08 17:29:28 · 285 阅读 · 0 评论 -
算法--在排序数组中查找元素的第一个和最后一个位置
描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1]来源:力扣(LeetCode)链接:https://le原创 2020-08-05 21:04:25 · 226 阅读 · 0 评论 -
算法--搜索插入位置
描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例示例 1: 输入: [1,3,5,6], 5 输出: 2示例 2: 输入: [1,3,5,6], 2 输出: 1示例 3: 输入: [1,3,5,6], 7 输出: 4示例 4: 输入: [1,3,5,6], 0 输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sear原创 2020-08-04 21:39:11 · 157 阅读 · 0 评论 -
算法--下一个排列
描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。示例以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/next-permutation著作权归领扣网络所有。原创 2020-08-03 18:19:07 · 191 阅读 · 0 评论 -
算法--搜索旋转排序数组
描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例示例 1: 输入: nums = [4,5,6,7,0,1,2], target = 0 输出: 4示例 2: 输入: nums = [4,5,6,7,0,1,2], tar原创 2020-08-02 18:57:34 · 244 阅读 · 0 评论 -
算法--移除元素
描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,原创 2020-08-01 21:58:29 · 190 阅读 · 0 评论 -
算法--删除排序数组中的重复项
描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组原创 2020-07-31 22:16:50 · 209 阅读 · 0 评论 -
算法--最接近的三数之和
描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum-closest著作权归领扣网络所有。商原创 2020-07-30 21:31:14 · 349 阅读 · 0 评论 -
算法--三数之和
描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum著作权归领扣网络所有。商业转原创 2020-07-29 18:35:22 · 581 阅读 · 0 评论 -
算法--盛最多水的容器
描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-most-water著作权归领扣网络所有。商业转载请联系官方授权,非商业转原创 2020-07-28 16:53:58 · 165 阅读 · 0 评论 -
算法--排序数组中位数
描述给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5来源:力扣(LeetCode)链接:https://leetcode-cn原创 2020-07-27 16:27:18 · 737 阅读 · 0 评论 -
算法--两数之和
描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络原创 2020-07-26 11:30:51 · 151 阅读 · 0 评论