您的位置:首页 > 教育 > 培训 > 广州市最新疫情最新消息_新疆网站制作_百度搜索热度_seo公司资源

广州市最新疫情最新消息_新疆网站制作_百度搜索热度_seo公司资源

2024/10/5 8:01:31 来源:https://blog.csdn.net/Blackoutdragon/article/details/142619480  浏览:    关键词:广州市最新疫情最新消息_新疆网站制作_百度搜索热度_seo公司资源
广州市最新疫情最新消息_新疆网站制作_百度搜索热度_seo公司资源

文章目录

    • 引言
    • 复习
      • 移动零
      • 盛最多的水
      • 三数之和
    • 新作
      • 接雨水
        • 个人实现
        • 参考实现
    • 总结

引言

  • 这段时间还是很迷茫的,秋招到了一个阶段,但是收获并不是很多,基本上都在泡池子,没有意向。也就没有在坚持刷题,只是整理一些专门的知识点。
  • 现在也想明白了,还是得好好刷题,继续找工作,总归能找到的,急也没用。一个一个面,一个一个总结吧!
  • 把hot100再过一遍!

复习

移动零

在这里插入图片描述

class Solution {public void moveZeroes(int[] nums) {int zeroIdx= 0;for(int i = 0;i < nums.length;i ++){if(nums[i] != 0){nums[zeroIdx ++] = nums[i];}}while(zeroIdx < nums.length)    nums[zeroIdx ++] = 0;}
}

盛最多的水

  • 这个怎么证明的,又忘记了,想想看!只记得怎么移动左右指针,然后具体的推导就不知道了。
  • 具体的数学推论还是有点混乱,不过大概的思路还是好记得,因为影响最终结果的始终是那个较短的边,直接移动短边就行了!
class Solution {public int maxArea(int[] height) {int l = 0;int r = height.length - 1;int res = 0;while (l <= r) {res = Math.max(res, Math.min(height[l], height[r]) * (r - l ));if ( height[l] < height[r])l++;elser--;}return res;}
}

在这里插入图片描述

三数之和

  • 有点丢人了,这个题目已经做了四五遍,还是出了问题

  • 出现了元素的重复,是因为双指针,左右指针不应该相交,左指针应该始终小于右指针。
    在这里插入图片描述

  • 修改完之后

class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i != 0 && nums[i] == nums[i - 1])continue;for (int l = i + 1, r = nums.length - 1; l < r; l++) {if (l != i + 1 && nums[l] == nums[l - 1])continue;while (r -1 > l && nums[l] + nums[r - 1] + nums[i] >= 0)r--;if (nums[l] + nums[r] + nums[i] == 0) {res.add(Arrays.asList(nums[i], nums[l], nums[r]));}}}return res;}
}

在这里插入图片描述

新作

接雨水

在这里插入图片描述
题目链接

个人实现

思路分析

  • 找到坑,先是单调递减序列,然后再试单调递增序列。
  • 没有任何思路,还是看题解
参考实现

在这里插入图片描述
在这里插入图片描述

  • 下面是逐个弹出元素后的计算过程
    • 计算对应的区域A的面积

在这里插入图片描述

  • 弹出第二个元素,然后在计算区域B的面积

在这里插入图片描述

  • 在往后移动一个元素,然后在弹出新的元素,具体如下如,计算区域C的面积

在这里插入图片描述

  • 这里使用单调栈实现,每一次弹出元素的时候,更新一下对应的元素

具体逻辑如下

  • 如果当前元素小于栈顶元素或者栈为空
    • 直接入栈
  • 如果当前元素大于等于栈顶元素
    • 弹出一个元素,计算一下邻接面积,宽度是当前元素减去左边界,高度是栈顶元素减去已经计算的last面积
    • 然后last在更新
class Solution {public int trap(int[] height) {Deque<Integer> stk = new ArrayDeque<>();int resVol = 0;for(int i = 0 ;i < height.length;i ++){int last = 0;// 循环中的代码计算的是A区域的面积while(!stk.isEmpty() && height[i] >= height[stk.peek()]){resVol += (height[stk.peek()]  - last) * (i - stk.peek() - 1);last = height[stk.peek()];stk.pop();                }// 计算的是区域B的代码,也就是更新之后的代码,当前元素小于栈顶的元素if(!stk.isEmpty())  resVol +=  (i - stk.peek() - 1) * (height[i] - last) ;stk.push(i);}return resVol;}
}

在这里插入图片描述

总结

  • 继续准备面试吧,目前还是0offer,有点焦虑了,继续准备吧!
  • 准备得那么久了,难受呀!不过还是继续冲吧!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com