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

【二刷hot-100】day1

目录

1.两数之和

2.字母异位词分组

 3.字母异位词分组

 4.最长连续序列

 5.移动零

6.盛最多水的容器

7.三数之和 

 8.接雨水

1.两数之和

class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map=new HashMap<>();for (int i=0;i<nums.length;i++){if(map.containsKey(target-nums[i])){return new int[] {map.get(target-nums[i]),i};}map.put(nums[i],i);} throw new IllegalArgumentException("No two sum solution");}
}

2.字母异位词分组

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> m=new HashMap<>();for(String str:strs){char[] s=str.toCharArray();Arrays.sort(s);//s相同的字符串分到同一组m.computeIfAbsent(new String(s),k->new ArrayList<>()).add(str);}return new ArrayList<>(m.values());}
}

 3.字母异位词分组

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> m=new HashMap<>();for(String str:strs){char[] s=str.toCharArray();Arrays.sort(s);//s相同的字符串分到同一组m.computeIfAbsent(new String(s),k->new ArrayList<>()).add(str);}return new ArrayList<>(m.values());}
}

 4.最长连续序列

class Solution {public int longestConsecutive(int[] nums) {// 创建一个 HashSet 集合用于存储数组中的整数Set<Integer> num_set = new HashSet<Integer>();for (int num : nums) {// 将数组中的每个整数添加到集合中,去除重复元素num_set.add(num);}int longestStreak = 0;for (int num : num_set) {// 如果集合中不包含当前整数减一的值,说明当前整数可能是一个连续序列的起点if (!num_set.contains(num - 1)) {int currentNum = num;int currentStreak = 1;// 当集合中包含当前数字加一的值时,说明连续序列可以继续延伸while (num_set.contains(currentNum + 1)) {currentNum += 1;currentStreak += 1;}// 更新最长连续序列的长度longestStreak = Math.max(longestStreak, currentStreak);}//存在那这个数肯定不是开头,直接跳过。}return longestStreak;}
}

 5.移动零

class Solution {public void moveZeroes(int[] nums) {if(nums==null){return;}//i和j指针int j=0;for(int i=0;i<nums.length;i++){//!=0,左边    =0,右边if(nums[i]!=0){int tmp=nums[i];nums[i]=nums[j];nums[j++]=tmp;}}}
}

6.盛最多水的容器

class Solution {public int maxArea(int[] height) {int n=height.length;int num1=0;int num2=n-1;int mx=0;while(num1<num2){mx=Math.max(mx,Math.min(height[num1],height[num2])*(num2-num1));if(height[num1]<height[num2]){num1+=1;}else{num2-=1;}}return mx;}
}

7.三数之和 

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>>ret=new ArrayList<>();Arrays.sort(nums);int n=nums.length;for(int k=0;k<n-2;k++){if(nums[k]>0){break;}//避免重复if(k>0&&nums[k]==nums[k-1]){continue;}int i=k+1;int j=n-1;while(i<j){int sum=nums[k]+nums[i]+nums[j];if(sum<0){i++;while(i<j&&nums[i]==nums[i-1]){i++;}}else if(sum>0){j--;while(i<j&&nums[j]==nums[j+1]){j--;}}else{ret.add(Arrays.asList(nums[k],nums[i],nums[j]));i++;j--;while(i<j&&nums[i]==nums[i-1]){i++;}while(i<j&&nums[j]==nums[j+1]){j--;}}}}return ret;}
}

 8.接雨水

class Solution {public int trap(int[] height) {int n=height.length;//height[0]到height[i]的最大值int [] preMax=new int[n];preMax[0]=height[0];for(int i=1;i<n;i++){preMax[i]=Math.max(preMax[i-1],height[i]);}//sufMax[i]表示height[i]到height[n-1]的最大值int [] sufMax=new int[n];sufMax[n-1]=height[n-1];for(int i=n-2;i>=0;i--){sufMax[i]=Math.max(sufMax[i+1],height[i]);}int ret=0;for(int i=0;i<n;i++){ret+=Math.min(preMax[i],sufMax[i])-height[i];}return ret;}
}

 ps:

略显轻松。


http://www.mrgr.cn/news/51818.html

相关文章:

  • SpringBoot中OKHttp和压缩文件的使用
  • 域渗透AD 示例场景漏洞 Kerberos Bronze Bit 【CVE-2020-17049】漏洞
  • 数据链中常见电磁干扰matlab仿真,对比噪声调频,线性调频,噪声,扫频,灵巧五种干扰模型
  • GEE 问题:超限中对于besteffort的使用到底行不行?
  • RT-Thread线程的定义和属性
  • 嵌入式:Keil的Code、RW、RO、ZI段的解析
  • 【Python3】Tornado6.4 高性能编程
  • 【ShuQiHere】 AI与自我意识:能否创造真正的自觉机器人?
  • STM32F103C8T6 使用 HAL 库驱动 OLED 显示屏
  • Java面向对象编程基础(二)
  • 【初阶数据结构】归并排序 - 分而治之的排序魔法
  • Linux df 命令详解
  • 基于AES的遥感图像加密算法matlab仿真
  • 法规标准-懂车帝智能化实测标准(2024版)
  • Hadoop查询引擎之Tez
  • 多线程(五):死锁内存可见性问题
  • 数据结构——单链表的基本操作
  • 算法题总结(十三)—— 动态规划(上)
  • 《深度学习》OpenCV库、Dlib库 人脸检测 案例解析
  • 从零开始实现大语言模型(十二):文本生成策略