帮你从算法的角度来认识数组------( 二 )
引言紧接上文我们来讲一下数组对应的leetcode算法题思路和代码485.最大连续1的个数1要求给定一个二进制数组nums 计算其中最大连续1的个数。2示例示例 1 输入nums [1,1,0,1,1,1] 输出3 解释开头的两位和最后的三位都是连续 1 所以最大连续 1 的个数是 3. 示例 2: 输入nums [1,0,1,1,0,1] 输出23思路我们先定义一个变量current来记录当前1的个数还有一个变量max来记录1的连续最大个数之后就开始循环判断如果为1则current1同时比较当前current和之前max谁大maxmaxcurrent如果不为1将current清零。最终返回最大值max4代码class Solution { public int findMaxConsecutiveOnes(int[] nums) { int current0; int max0; for(int num:nums){ if(num1){ current; maxMath.max(max,current); }else{ current0; } } return max; } }283.移动零1要求给定一个数组nums编写一个函数将所有0移动到数组的末尾同时保持非零元素的相对顺序。请注意必须在不复制数组的情况下原地对数组进行操作。2示例示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出: [0]3思路我们可以用一个指针来依次移动旨在将后面不为0的元素赋值到指针所指位置这样就实现了非0元素都在数组前面当所有非0元素遍历完后将指针后面的位置全赋值为0这样就可以实现题意4代码class Solution { public void moveZeroes(int[] nums) { int index0; int nnums.length; for(int i0;in;i){ if(nums[i]!0){ nums[index]nums[i]; index; } } for(int jindex;jn;j){ nums[j]0; } } }27.移除元素1要求给你一个数组nums和一个值val你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k要通过此题您需要执行以下操作① 更改nums数组使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。② 返回k。2示例示例 1 输入nums [3,2,2,3], val 3 输出2, nums [2,2,_,_] 解释你的函数应该返回 k 2, 并且 nums 中的前两个元素均为 2。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。 示例 2 输入nums [0,1,2,2,3,0,4,2], val 2 输出5, nums [0,1,4,0,3,_,_,_] 解释你的函数应该返回 k 5并且 nums 中的前五个元素为 0,0,1,3,4。 注意这五个元素可以任意顺序返回。 你在返回的 k 个元素之外留下了什么并不重要因此它们并不计入评测。3思路和上一题思路基本一致用一个指针用来依次遍历数组将循环中找到的后面不等于val的值放在指针所指位置循环原则边循环坐标边比较该坐标的值是否等于val若等于则跳过若不同则将该值覆盖到指针所指位置最后返回指针所指下标值可能描述的有点不太清楚直接看代码4代码class Solution { public int removeElement(int[] nums, int val) { int slow0; for(int fast0;fastnums.length;fast){ if(nums[fast]!val){ //不相同则覆盖覆盖成不等于val的元素 nums[slow]nums[fast]; slow; } } return slow; } }小舟有话说做完这三道可以尝试一下其他的数组相关题目下一个知识点是链表哦如果有帮助到你的话点点关注~下次找我不迷路
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437943.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!