当前位置: 首页 > news >正文

leetcode刷题记录04——top100题里的7道中等题

leetcode刷题记录04——top100题里的7道中等题

上一篇博客:
leetcode刷题记录01——top100题里的7道简单题
leetcode刷题记录02——top100题里的7道简单题
leetcode刷题记录03——top100题里的6道简单+1道中等题

  1. 最长连续序列
    一遍过,先Arrays.sort(nums);排序然后去判断,i-1与i下标的值为1则增加1,如果差值>1则置为0,在每个cnt里取最大值;

  2. 盛最多水的容器
    没有太多思路,想到了可能与最大股票价格有点像,但不知道怎么写。
    题意是好理解的,看了题解,豁然开朗。双指针太牛了。

    class Solution {public int maxArea(int[] height) {int l = 0, r = height.length-1;int ans = 0;while(l<r){int area = Math.min(height[l],height[r])*(r-l);ans = Math.max(ans,area);if(height[l]<=height[r]){++l;}else{--r;}}return ans;}
    }
    
  3. 三数之和
    自己写了半天有超时,还是老实按照题解的来吧,双指针。
    在这里插入图片描述

# ArraysList<Integer> 
List<Integer> thirdList = Arrays.asList(nums[i],nums[j],third);
# int[]List<Integer>  
List<Integer> integerList = Arrays.stream(nums).boxed().collect(Collectors.toList());
# List<Integer>String  
integerList.toString(); 或者String thirdString = thirdList.stream().map(String::valueOf).collect(Collectors.joining(","));
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> list = new ArrayList<List<Integer>>();Arrays.sort(nums);for(int i = 0; i< nums.length; i++){if(nums[i]> 0){break;}if(i > 0 && nums[i]==nums[i-1]){continue;}int left = i+1;int right = nums.length-1;int target = -nums[i];while(left < right){int sum = nums[left]+nums[right];if(sum == target){list.add(Arrays.asList(nums[i],nums[left],nums[right]));left++;right--;while(left < right && nums[left]==nums[left-1]){left++;}while(left< right && nums[right]==nums[right+1]){right--;}}else if(sum>target){right--;}else{left++;}}}return list;}
}
  1. 无重复的最长字串
    第一印象想到了set,看了题解才有点明白。mark下
class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合,记录每个字符是否出现过Set<Character> set = new HashSet<>();int ans = 0;// 右指针,从最左侧开始int rk = -1;for(int i = 0; i< s.length(); i++){if(i != 0){// 左指针向右移动一格,移除一个字符set.remove(s.charAt(i-1));}while(rk+1<s.length() && !set.contains(s.charAt(rk+1))){// 不断的移动右指针set.add(s.charAt(rk+1));rk+=1;}// 第 i 到 rk 个字符是一个极长的无重复字符子串ans = Math.max(ans,rk-i+1);}return ans;}
}
  1. 找到字符串中的所有字母异位词
    一遍过,个人认为比官方(答案有点匪夷所思,实在没看懂)的好理解。
    (1)把q先转成charArray,排序后在拼接。
    (2)然后在p中遍历每次截取q长度的子串,然后转成charArray排序后在拼接;
    (3)与(1)中结果进行比较
class Solution {public List<Integer> findAnagrams(String s, String p) {char[] pChar = p.toCharArray();Arrays.sort(pChar);String pString = new String(pChar);List<Integer> list = new ArrayList<>();for(int i =0; i < s.length()-p.length()+1;i++){char[] subStr = s.substring(i,i+p.length()).toCharArray();Arrays.sort(subStr);if(pString.equals(new String(subStr))){list.add(i);}}return list;}
}
  1. 和为k的子数组
    题目没太看懂,大致是判断里边有多少个连续序列的和为k;
    直接抄的答案…
class Solution {public int subarraySum(int[] nums, int k) {int count = 0;for(int start = 0; start < nums.length; start++){int sum = 0;for(int end = start;end>=0;--end){sum+=nums[end];if(sum==k){count++;}}}return count;}
}
  1. 最大子数组和
    直接暴力遍历法;部分用例会超时;
class Solution {public int maxSubArray(int[] nums) {if(nums.length==0){return 0;}else if(nums.length==1){return nums[0];}int ans = Integer.MIN_VALUE;for(int i = 0; i< nums.length; i++){int max = 0;int j = i;while(j < nums.length){max += nums[j];ans = Math.max(ans,max);j+=1;}}return ans;}
}

看了答案后,用动态规划,似乎也比较好理解;

class Solution {public int maxSubArray(int[] nums) {if(nums.length==0){return 0;}else if(nums.length==1){return nums[0];}int pre = 0;int maxAns = nums[0];for(int i = 0; i< nums.length; i++){pre = Math.max(pre+nums[i],nums[i]);maxAns = Math.max(maxAns, pre);}return maxAns;}
}
http://www.dtcms.com/a/349100.html

相关文章:

  • 网络编程-创建TCP协议服务器
  • 后端Web实战-Java代码操作数据库
  • 跨摄像头追踪精度↑79%!陌讯动态决策模型在智慧园区的落地实践
  • 跨摄像头追踪准确率↑18%!陌讯时空感知算法在智慧安防的实战解析
  • 复杂场景鲁棒性突破!陌讯自适应融合算法在厂区越界检测的实战优化​
  • 使用Localtunnel搭建与外网交互简单的https本地服务器
  • 时序数据库选型“下半场”:从性能竞赛到生态博弈,四大主流架构深度横评
  • Windows 系统下 Android SDK 配置教程
  • 【数据结构与算法】并查集
  • 对象作为HashMap的key的注意事项
  • kubernetes集群搭建
  • 【贪心算法】day2
  • Golang云端编程入门指南:前沿框架与技术全景解析
  • 初探机器学习:从概念定义到前沿应用
  • 湖南(源点咨询)市场调研如何在行业研究中快速有效介入(尾篇)
  • mpv - write_video 流程解析
  • 从技术精英到“芯”途末路:一位工程师的沉沦与救赎
  • 暖色调街头人像摄影照片Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • OpenHarmony Audio子系统全栈解码:从HDI驱动到DSP算法的低延迟高保真之路
  • SQL Server缩小日志文件.ldf的方法(适用于开发环境)
  • 复杂水域场景识别率↑89%!陌讯多模态融合算法在岸边垃圾检测的落地实践
  • Python学习笔记之(二)变量和简单的数据类型
  • 鸿蒙中Image白块问题分析与解决方案
  • Java:HashMap的使用
  • 2025/8/24 DockerDesktop安装使用
  • 云原生俱乐部-RH294知识点归纳(3)
  • Python内置函数全解析:30个核心函数语法、案例与最佳实践指南
  • Linux应急响应一般思路(二)
  • C++测试框架高级资源管理模块完整实现指南
  • 八、redis 入门 之 雪崩、穿透、击穿