LeetCode----Array
想飞的盗版鱼
这个作者很懒,什么都没留下…
展开
-
leetcode(array)--39. 组合总和
leetcode(array)–39. 组合总和1,题目:2,思路:以 target = 7 为 根结点 ,创建一个分支的时 做减法 ;每一个箭头表示:从父亲结点的数值减去边上的数值,得到孩子结点的数值。边的值就是题目中给出的 candidate 数组的每个元素的值;减到 00 或者负数的时候停止,即:结点 00 和负数结点成为叶子结点;所有从根结点到结点 00 的路径(只能从上往下,没有回路)就是题目要找的一个结果。3,代码: import java.util.ArrayDeque原创 2020-09-09 10:27:18 · 185 阅读 · 1 评论 -
leetcode(135)--分发糖果
leetcode(135)–分发糖果1,题目:2,思路:解题思路:规则定义: 设学生 A 和学生 B 左右相邻,A 在 B 左边;左规则: 当 ratings_B>ratings_Aratings B >ratings A 时,B的糖比 A 的糖数量多。右规则: 当 ratings_A>ratings_Bratings A>ratingsB 时,A 的糖比 B 的糖数量多。算法流程:先从左至右遍历学生成绩 ratings,按照以下规则给糖,并记录在 left 中:原创 2020-09-02 17:10:49 · 223 阅读 · 0 评论 -
leetcode(Aarray)--215 数组中的第k个最大元素
leetcode(Aarray)–215 数组中的第k个最大元素1,题目:2,思路:方法一:排序数组(Arrays.sort(nums))方法二:小顶堆小顶堆:即堆顶元素是整个堆的最小值将数组中的元素加入到堆中,并保持堆中的大小<k,这样,堆中就保留了前k个最大的元素,这样呢,堆顶元素就是所需的答案堆里先保存k个数,然后后面的数,比堆顶大的话,就堆顶出队,将大于堆顶的数加...原创 2020-05-06 21:44:00 · 127 阅读 · 0 评论 -
leetcode(Array)--209 长度最小的子数组(分析)
leetcode(Array)–209 长度最小的子数组1,题目:2,思路:用滑动窗口:left为慢指针,right为快指针。当其和>s时,left慢指针右移,缩小窗口当其和<s时,right快指针右移,扩大窗口3,代码:class Solution { public int minSubArrayLen(int s, int[] nums) { ...原创 2020-04-13 13:54:04 · 91 阅读 · 0 评论 -
leetcode(Array)--189 旋转数组
leetcode(Array)–189 旋转数组1,题目:2,思路:方法一:在k>0的循环中,执行下面操作:(因为k等于几就执行下面操作几次)用i指向数组的最后,用一个临时变量temp保存最后这个元素其他前面的元素都往后移,最后将temp赋值给nums[0]方法二:别人写的:新new一个数组temp,找好逻辑对应关系temp[(i+k) % len] = nums[i...原创 2020-04-13 13:42:51 · 75 阅读 · 0 评论 -
leetcode(Array)--167 两数之和2-输入有序数组
leetcode(Array)–167 两数之和2-输入有序数组1,题目:2,思路:方法一:用目标值-一个数,求另一个数在数组中的位置(自己写的)(具体可以看代码中的标注)方法二:用两个left和right指针分别指向原数组的左右,用两个之和与target相比较,来移动left和right的位置3,代码:方法一:用目标值-一个数,求另一个数在数组中的位置(自己写的)class ...原创 2020-04-12 21:01:08 · 109 阅读 · 0 评论 -
leetcode(Array)--154 寻找旋转排序数组中的最小2
leetcode(Array)–154 寻找旋转排序数组中的最小21,题目:2,思路:方法一:暴力方法:也就是直接在循环中,谁最小就返回谁方法二:二分法:一个left指针指向最左边,一个right指针指向最右边, 先进行去重复操作(因为数组有重复元素)然后就用mid中间点来判断和nums[right]的值,来判断最小值在右边还是在左边,在哪边就循环哪边。3,代码:方法一:暴...原创 2020-04-12 20:35:23 · 101 阅读 · 0 评论 -
leetcode(Array)--153 寻找旋转排序数组中的最小
leetcode(Array)–153 寻找旋转排序数组中的最小1,题目:2,思路:方法一:暴力方法:就是直接循环,谁最小就返回谁方法二:二分法:(1)有序数组经过旋转,旋转完成后,前面肯定是大数组,后面是小的数组。如何判断取中点是在左边还是在右边呢?(2)如果中点的值大于右端的值,说明中点处在小数组中,right=mid(3)如果中间点的值小于右端的值,说明中间处在...原创 2020-04-12 14:04:27 · 93 阅读 · 0 评论 -
leetcode(Array)--108 将有序数组转换成二叉搜索
leetcode(Array)–108 将有序数组转换成二叉搜索1,题目:2,思路:以数组的中间点的元素值作为根节点建树,然后根节点的左子树和右子树中,分别再找根节点连建立子树,就这样依次循环。3,代码:class Solution { public TreeNode sortedArrayToBST(int[] nums) { return rec(nums,...原创 2020-04-12 13:35:32 · 123 阅读 · 0 评论 -
LeetCode(Array)--88 合并两个有序数组
LeetCode(Array)–88 合并两个有序数组1,题目:2,思路:在插入的过程中也执行排序。(1)原来两个数组已经排好序了,用i指向nums1的最高位,用j来指向nums2的最高位,k指向新数组(合并)的最高位。(2)用nums1[i]和nums2[j]来做比较,谁大谁插入新的数组中,并移动指针。。就这样循环即可(3)最后把一个数组剩的元素也都直接插入新数组中3,代码:...原创 2020-04-12 10:35:14 · 100 阅读 · 0 评论 -
leetcode(Array)--81 搜索旋转排序数组2
leetcode(Array)–81 搜索旋转排序数组21,题目:2,思路:方法一:简单暴力法(很直观的循环来做) 就是直接循环看看有没有nums[i]== target,有就返回true,没有就false方法二:二分法 这个思路也是比较简单,和之前的二分法一样:有一点需要说明就是要记得去重复。3,代码:方法一:class Solution { public boole...原创 2020-04-11 22:09:39 · 75 阅读 · 0 评论 -
leetcode(Array)--80 删除排序数组中的重复项2
leetcode(Array)–80 删除排序数组中的重复项21,题目:2,思路:(1),i从2开始遍历数组,index为指向要覆盖的元素的位置(2),当Nums[i] !=nums[index-2],就将nums[index++]=nums[i],否则,说明有超过2个值是一样的,这时候index就不动(因为index是指向被覆盖的元素的位置)只移动i(3)当Nums[i]==num...原创 2020-04-11 21:26:42 · 103 阅读 · 0 评论 -
leetcode(Array)--34 在排序数组中查找元素的第一个和最后一个位置
leetcode(Array)–34 在排序数组中查找元素的第一个和最后一个位置1,题目:2,思路:(1)、利用二分法,先找到中间值mid对应的值,若nums[mid] == target,则利用循环向左和向右找出最左的target和最右的target(2),若nums[mid]!=target,则target的值不是在左边数组里就是在右边的数组里,再用if条件找出最左和最右的targ...原创 2020-04-11 20:55:31 · 118 阅读 · 0 评论 -
leetcode(Array)--33 搜索旋转排序数组
leetcode(Array)–33 搜索旋转排序数组1,题目:2,思路:使用二分法。在循环中来循环操作:如下:(1)如果中间数的值<最右边数的值,则表示右半段是有序的;(2)如果中间数的值>最右边数的值,则表示左 半段是有序的;(3)只要我们在有序的半段里首尾来个数对应的值来判断目标值是否在这一区域内,这样就可以确定保留哪半边了3,代码:class Solut...原创 2020-04-11 13:53:22 · 108 阅读 · 0 评论 -
leetcode(Array)--26 删除排序数组中的重复项
leetcode(Array)–26删除排序数组中的重复项1,题目:2,思路:(1)数组完成排序后,我们可以放置两个指针i和j,其中i是慢指针,j是快指针,只要nums[i] == nums[j],我们就增加j以跳过重复项(2)当nums[i] != nums[j]时,跳过重复项的运行已经结束,所以必须把nums[j]的值复制到nums[i++](3)接着重复相同的过程,直到达到数...原创 2020-04-11 13:28:25 · 87 阅读 · 0 评论 -
leetcode(array)--16 最接近的三数之和
leetcode(array)–16最接近的三数之和1,题目:2,思路:(1)在数组中进行遍历,没遍历一个值利用其下标i,形成一个固定值nums[i](2)start=i+1,end=nums.length,利用循环进行指针的移动(3)利用nums[i]+nums[start]+nums[end]这样为三个数之和来个targrt进行比较,看看哪个和 离target最接近(4)若和&...原创 2020-04-10 21:52:04 · 114 阅读 · 0 评论 -
leetcode(Array)--209 长度最小的子数组
**leetcode(Array)–209 长度最小的子数组**1,题目:2,思路:当输出或比较结果在原数组结构中是连续排列的时候,可以使用滑动窗口算法求解。----将两个指针比作一个窗口,通过移动指针的位置改变窗口的大小,观察窗口中元素是否符合题意。(1)初始窗口中只有数组开头的一个元素(2)当窗口中的元素小于目标值,右指针向右移,扩大窗口(3)当窗口中的元素大于目标值,比较...原创 2020-04-10 21:13:28 · 130 阅读 · 0 评论 -
leetcode(Array)---15,三数之和
1,题目:2,思路:(1)此题的关键是将三数之和=0,转换成:两数之和=0-第三个数(2)先 将原数组nums排序,新建一个数组用于放最后的结果(3)下面就是在for循环里,i从0开始,l 从1+1开始,r等于nums.length-1,sum=0-nums[i],就比较两数之和是否等于sum(4)如果等于的话,就把i,l,r对应的元素值放入到新的数组中,相应的坐标移动(这里要记得去重...原创 2019-11-24 15:01:04 · 98 阅读 · 0 评论 -
leetcode(Array)---11,盛最多水的容器
1,题目:2,思路:(1)此题比较简单,两层循环即可。(2)在循环里,找最大的面积即可3,代码:class Solution { public int maxArea(int[] height) { int sum = 0; int maxSum = 0; for(int i=0; i<height.length; i++)...原创 2019-11-24 14:48:50 · 115 阅读 · 0 评论 -
leetcode(Array)---4,寻找两个有序数组的中位数
1,题目:2,思路:(1)新建一个数组nums,数组的大小是原来两个数组的个数之和(2)在while循环中,将nums1,nums2有序插入到新的数组nums中(3)跳出循环后,如果原来的数组nums1或者nums2还有没有插入的,在插入(4)在新数组nums中,按照数组长度找出中间那个坐标即可。因为nums这个数组中的元素值已经是排好顺序的。3,代码:class Solution...原创 2019-11-24 14:43:58 · 120 阅读 · 0 评论 -
leetcode(Array)---1,两数之和
1,题目2,思路:(1)此题目比较简单,用双层循环即可。具体看下面代码,此题比较简单3,代码:class Solution { public int[] twoSum(int[] nums, int target) { int[] results = {0,0}; for(int i=0; i<nums.length-1; i++) { ...原创 2019-11-24 14:34:23 · 88 阅读 · 0 评论