深圳网站建设九曲网可信网站
2026/4/8 17:36:32 网站建设 项目流程
深圳网站建设九曲网,可信网站,免费推广网站入口2023燕,南京市住房和城乡建设部网站1.移动零 1.1题目链接 移动零 1.2题目解析 题目要求将所有0移动到数组末尾#xff0c;同时保持非0元素的相对顺序#xff0c;其实我们可以反向思考#xff1a;将所有非0元素移动到数组最前面#xff0c;因为题目关心的只是非0元素的顺序#xff1a;我们可以定义两个下…1.移动零1.1题目链接移动零1.2题目解析题目要求将所有0移动到数组末尾同时保持非0元素的相对顺序其实我们可以反向思考将所有非0元素移动到数组最前面因为题目关心的只是非0元素的顺序我们可以定义两个下标dest和cur用cur来遍历整个数组fest则表示非0元素应该被放置的位置。遇到非0元素就把它放在dest的位置 然后dest直到整个数组被遍历完成那么所有的非0元素就给放在前面了。1.3代码实现publicvoidmoveZeroes(int[]nums){intdest0;intcur0;intlengthnums.length;for(cur0;curlength;cur){if(nums[cur]!0){inttmpnums[cur];nums[cur]nums[dest];nums[dest]tmp;dest;}}}2.盛最多水的容器2.1题目链接盛最多水的容器2.2题目解析本题让求容器的最大储水水量 其实也就是求容器的最大体积体积宽度*高度我们依然可以采用双指针来解这道题定义一个left在数组最左边right在数组最右边它们之间的差值就是宽度那么初始状态下体积就是差值乘以nums[left]和nums[right]的较小值因为短板效应嘛OK这就算出来一个体积值 但是不确定是不是最大所以我们要接着算——让它们往中间走那么是让left还是right–呢精髓就在于当left或者right移动时它们的差值一定是在减小也就是容器的宽度宽度减小情况下如果我们想获得比初次更大的体积必须让高度增加也就是nums[left]或者nums[right]所以让谁走很明显了肯定是较小的那个高度走本来你就拖后腿只有你走了才可能换来更大的值让原来的较大值“对比”之下成为较小值从而以高度的变动弥补宽度的减小2.3代码实现publicintmaxArea(int[]height){intproVolume0;intleft0;intlengthheight.length;intrightlength-1;while(leftright){//体积是由较低的高度决定的intvolumemin(height[left],height[right])*(right-left);if(volumeproVolume){proVolumevolume;}if(height[left]height[right]){left;}else{right--;}}returnproVolume;}publicintmin(inta,intb){if(ab){returnb;}else{returna;}}3.三数之和3.1题目链接三数之和3.2题目解析思路并不难我们直接遍历数组首先固定一个数开始算出0-nums[i]的值也就是剩下两个数相加的目标值剩下两个数就从除去第一个数之后的区间中找【也就是两数之和的逻辑去做】。固定数从下标0开始一直遍历到length-2的位置。难的点在于去重要求返回所有不重复的三元组按照这个思路有两两个需要考虑去重的地方i和两数之和部分首先两数之和可能不止有一组相加等于0-nums[i]的比如 0 2 0 1 1假设0-nums[i]是1那么我们去重的处理方式就是先给数组排成正序这样处理之后就是0 0 0 0 1 1 1 1 2当我们找到一个符合的两元组之后 比如0 1 我们可以写一个while让left一直直到脱离0为止right也是同理那么i的去重就比较简单比如整个数组是 -1 -1 -1 0 0 0 0 0 1 1 1 1 2i在下标0的位置我们搞一个ji如果nums[i]nums[j]那么i就一直加到这个条件不成立 也就是i对应元素值变化而不是单纯的下标加一。以上操作还需考虑下标越界的问题我是图省事直接用if语句判断的。3.3代码实现publicstaticListListIntegerthreeSum(int[]nums){Arrays.sort(nums);intlengthnums.length;ListListIntegeranswernewArrayList();for(inti0;ilength-2;i){intlefti1;intrightlength-1;inttarget0-nums[i];while(leftright){if(nums[left]nums[right]target){ListIntegersmallnewArrayList();small.add(nums[i]);small.add(nums[left]);small.add(nums[right]);answer.add(small);//开始移动下标(去重)while(nums[left]small.get(1)){if(leftright){break;}left;}while(nums[right]small.get(2)){if(leftright){break;}right--;}}else{if(leftright){break;}if(nums[left]nums[right]target){right--;}else{left;}}}//给i去重intji1;while(nums[i]nums[j]){i;j;if(jlength){break;}}}returnanswer;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询