LeetCode数组部分
Tag: Array
Leo木
这个作者很懒,什么都没留下…
展开
-
二维数组的深克隆
今天在写一道算法题时,发现二维数组使用clone和arraycopy两种方法进行数组复制只能实现浅克隆。起初有点疑惑,但仔细思考了一下这两种方式的实现原理就能明白其中的原因。首先,这两种方式都会对基本类型的值进行赋值,但是对于引用变量来说,它们也仅仅只是将引用的变量的‘值’克隆一份,也就是引用变量的地址。因此对于二维数组来说,其实际为一个元素值为一维数组地址的一维数组,故在使用上述方法克隆数组时,新的二维数组仅仅只将原有的一维引用地址复制了一份。那么如何实现多维数组间的深克隆呢?有两种方式:多次遍历原创 2020-08-11 10:47:56 · 933 阅读 · 0 评论 -
LeetCode45 跳跃游戏II
问题描述:给定一个非负整数数组,你最初位于数组的第一个位置,数组中的每个元素代表你在该位置可以跳跃的最大长度,你的目标是使用最少的跳跃次数到达数组的最后一个位置。注:该问题为跳跃游戏的升级版思想:自顶向下动态规划类似版本一中自顶向下动态规划,但将信息表改为到达尾位置所需的步数,如果不可达赋值为MAX。时间复杂度:o(n2)空间复杂度:o(n)//自顶向下动态规划cla...原创 2020-02-29 10:39:54 · 373 阅读 · 0 评论 -
Leetcode55 跳跃游戏
//递归回溯class Solution { public boolean canJump(int[] nums) { if(nums.length < 2) return true; return jump(nums, 0); } public boolean jump(int[] nums, int index){ ...原创 2020-02-29 10:40:59 · 236 阅读 · 0 评论 -
LeetCode48 旋转图像
问题描述:给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针原地旋转 90 度。例:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]//按层次旋转每个元素class Solution { public void rotate(int[][] mat...原创 2020-02-29 10:40:22 · 191 阅读 · 0 评论 -
LeetCode53 最大子序和
//贪心法class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0 || nums == null) return 0; int max = nums[0],sum = nums[0]; for(int i = 1; i < nums.le...原创 2020-02-29 10:40:44 · 98 阅读 · 0 评论 -
LeetCode42 接雨水
问题描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。例:输入: [0,1,0,2,1,0,1,3,2,1,2,1];输出: 6思路:暴力法(按列求解)栈双指针//java//暴力法class Solution { public int trap(int[] height) { int len ...原创 2020-01-13 20:17:42 · 253 阅读 · 0 评论 -
LeetCode41 缺失的第一个正数
问题描述:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。例:输入: [1,2,0];输出: 3输入: [7,8,9,11,12];输出: 1思路:通过改变数组中的元素来判断数组包含正数的情况。step 1: 遍历判断是否存在1,若没有,直接返回1;否则进入第二步step 2: 判断长度是否为1,若为1,说明只存在1一个元素,返回2step 3: 由于数组个数为n,故可能...原创 2020-01-11 19:09:22 · 133 阅读 · 0 评论 -
LeetCode39 组合总和
问题描述:给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。例:输入: candidates = [2,3,6,7], target = 7。所求解集为:[ [7], [2,2,3] ]注:candidates 中的数字可以无限制重复被选取所有数字(包括 target)都是正整数。解集...原创 2020-01-11 19:12:03 · 184 阅读 · 0 评论 -
LeetCode35 搜索插入位置
问题描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。例:输入: [1,3,5,6], 5;输出: 2思路:直接遍历时间复杂度:o(n)空间复杂度:o(1)二分查找类似与查找左边界时间复杂度:o(log n)空间复杂度:o(1)//java//直接遍历class Solution...原创 2020-01-06 19:08:14 · 201 阅读 · 0 评论 -
LeetCode34 在排序数组中查找元素的第一个和最后一个位置
问题描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。例:输入: nums = [5,7,7,8,8,10], target = 8;输出: [3,4]思路:二分查找二分查找一般分为几种情况:查找某个值初始化:le...原创 2020-01-05 20:30:15 · 95 阅读 · 0 评论 -
LeetCode33 搜索旋转排序数组
问题描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。例:输入: nums = [4,5,6,7,0,1,2], target = 0;输出: 4注:你可以假设数组中不存在重复的元素。你的算法时间复杂...原创 2020-01-04 19:52:55 · 90 阅读 · 0 评论 -
LeetCode31 下一个排列
问题描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。例:1,2,3 → 1,3,2;3,2,1 → 1,2,3思路:字典序算法这道题需要用到字典序的概念,基于此概念,直接进行求解。时间复杂度:o(n)空间复杂度:o(1)class Solution { pu...原创 2020-01-03 20:44:45 · 84 阅读 · 0 评论 -
LeetCode27 移除元素
问题描述:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。例:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。不需要考虑数组中超出新长度后面的元素。思路:双指针(类...原创 2020-01-03 16:42:27 · 112 阅读 · 0 评论 -
LeetCode26 删除排序数组的重复项
问题描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。例:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。思路:双指针法设置前后指针,前指针指向即将修改的元素,后指针遍历,...原创 2020-01-03 16:22:16 · 68 阅读 · 0 评论 -
LeetCode18 四数之和
问题描述:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [...原创 2020-01-01 15:07:48 · 119 阅读 · 0 评论 -
LeetCode16 最接近的三数之和
问题描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例:给定数组 nums = [-1,2,1,-4] 和 target = 1与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路:暴力遍历法step1 : (判断...原创 2019-12-22 17:12:46 · 95 阅读 · 0 评论 -
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-20 13:32:59 · 101 阅读 · 0 评论 -
LeetCode11 盛水最大容器
思路:暴力求解直接暴力枚举每种情况,找出最大面积时间复杂度:o(n2)空间复杂度:o(1)双指针法设置两个指针(引用)指向首尾元素,设置最大面积maxarea,每次将指向较短元素的指针移向另一个指针,在移动的过程中更新数组。(由于较短元素限制了面积,向内移动会使距离变小,移动较短元素不会使结果变得更差,因此每次移动较小元素。反之,若每次移动较大元素只会使结果变小,因为距...原创 2019-12-14 10:13:26 · 229 阅读 · 0 评论 -
Leetcode04寻找两个有序数组的中位数
问题描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。思路:暴力求解.通过直接对数组遍历排序,从新数组中直接计算中位数。时间复杂度:m+n空间复杂度:o(m+n)数组遍历不对数组进行重新组合,直接在遍历过程中计算位置(分奇偶)。时间复杂度:o(m+n)空间复...原创 2019-10-19 16:32:04 · 248 阅读 · 0 评论 -
Leetcode01 两数之和
Leetcode01 两数之和问题描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。//暴力求解(cpp)class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { ...原创 2019-10-11 16:00:10 · 334 阅读 · 5 评论