面试经典150题【41-50】

文章目录

  • 面试经典150题【41-50】
    • 49.字母异位词分组
    • 1. 两数之和
    • 202.快乐数
    • 219. 存在重复元素II
    • 128.最长连续序列
    • 228. 汇总区间
    • 56.合并区间(华为面试题)
    • 57.插入区间
    • 452.用最少的箭引爆气球
    • 20.有效的括号

面试经典150题【41-50】

49.字母异位词分组

在这里插入图片描述

用这种流式的处理
return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> { 处理逻辑 })).values() );
不然处理起来太麻烦了。

class Solution {public List<List<String>> groupAnagrams(String[] strs) {return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> {// 返回 str 排序后的结果。// 按排序后的结果来grouping by,算子类似于 sql 里的 group by。char[] array = str.toCharArray();Arrays.sort(array);return new String(array);})).values());}
}

如果不排序的话,可以进行编码: [b,a,a,a,b,c] 编码成 a3b2c1, 然后再group by.

class Solution {public List<List<String>> groupAnagrams(String[] strs) {return new ArrayList<>(Arrays.stream(strs).collect(Collectors.groupingBy(str -> {int[] counter = new int[26];for (int i = 0; i < str.length(); i++) {counter[str.charAt(i) - 'a']++;}StringBuilder sb = new StringBuilder();for (int i = 0; i < 26; i++) {// 这里的 if 是可省略的,但是加上 if 以后,生成的 sb 更短,后续 groupingBy 会更快。if (counter[i] != 0) {sb.append((char) ('a' + i));sb.append(counter[i]);}}return sb.toString();})).values());}
}

1. 两数之和

在这里插入图片描述
每遍历一个数,就把这个数字放到哈希表里。当遍历到下一个数字的时候,看哈希表里是否存在Key为 target - nums[i] 的值。

202.快乐数

在这里插入图片描述
这个如果不是1,会进入一个循环。判断循环就用双指针就行。
在这里插入图片描述
判断成环。一个是可以用快慢指针,他们俩相遇则有环。一个是可以用一个set,如果有重复元素则有环。

219. 存在重复元素II

在这里插入图片描述
区间大小为k,但是怎么保证K个里面能直接查出元素呢。
方法一:定义一个大小为k的hashSet, 如果包含元素则说明重复。因为hashSet会自动扩容,所以写法是: if(hashSet.size() > k) hashSet.remove(nums[ i -k ] )
方法二:哈希表记录[k,v]—> [ nums[i],i] ,如果包含则比较与i的距离,大于k则将[nums[i],j] 赋值给[nums[i],i] ,继续遍历。

128.最长连续序列

在这里插入图片描述
因为是O(n) ,所以不能排序。遍历一遍,放到set里。
然后再遍历一遍Set, 如果包含 nums[i]+1,依次遍历有没有nums[i] +2, nums[i] +3 等等
但是这样也会导致很多重复的遍历。 可以放到map里 [key,value] ->[ nums[i], 左右最长的长度]
当前的长度 = left + right +1

 public int longestConsecutive(int[] nums) {HashMap<Integer,Integer> hashMap=new HashMap<>();int ans=0;for(int i=0;i<nums.length;i++){//包含说明以前处理过,不包含的话可能是单独,也可能是边界,也可能是刚好插在俩个大条之间if(!hashMap.containsKey(nums[i])){int left=hashMap.getOrDefault(nums[i]-1,0);int right=hashMap.getOrDefault(nums[i]+1,0);int tempAns=left+right+1;if(tempAns>ans){ans=tempAns;}hashMap.put(nums[i],tempAns);//不能只更新自己,边界也要更新hashMap.put(nums[i]+right,tempAns);hashMap.put(nums[i]-left,tempAns);}}return ans;}

228. 汇总区间

按照题意模拟即可。

56.合并区间(华为面试题)

在这里插入图片描述
先按左区间排序,然后依次遍历,根据 nums[i+1][0] 和 nums[i][1] 判断是否需要合并。

public class LC56 {public int[][] merge(int[][] intervals) {Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0]-o2[0];}});ArrayList<int[]> ans=new ArrayList<>();int left=intervals[0][0],right=intervals[0][1];for(int i=1;i<intervals.length;i++){if(intervals[i][0]>right){//不合并,装载ans.add(new int[]{left,right});//开始记录新的区间left=intervals[i][0];right=intervals[i][1];}else{//合并区间right=Math.max(right,intervals[i][1]);}}//无论是intervals里只有一个元素的特判,  还是 正常情况下最后一步, 都要有下面这一行。ans.add(new int[]{left,right});return ans.toArray(new int[][]{});}
}

57.插入区间

和56.合并区间一个意思

452.用最少的箭引爆气球

在这里插入图片描述
所有的这种二维数组的,都要先排序。无非就是按照 左边界 排序 或者按照 右边界 排序。
而气球这种场景,应该是按照右边界排序,然后射击第一个存在的气球的最右边。
判断此次射击会爆几个气球,要看别的气球的左边界是否小于射击点。(因为是按右边界排序的,右边肯定是大的,左边小就能被射到)

public int findMinArrowShots(int[][] points) {if(points.length==0) return 0;Arrays.sort(points, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {//return o1[1]-o2[1];if(o1[1]>o2[1]){return 1;}else if(o1[1]<o2[1]){return -1;}else{return 0;}}});//按右边界  进行排序//击毙第一个气球的最右边,能击毙几个算几个。//pos为击毙点int pos=points[0][1];int ans=1;for(int i=0;i<points.length;i++){//因为是按右边界排序的,判断第i个气球爆没爆,要看第i个气球的左边界。if(pos<points[i][0]){ans++;pos=points[i][1];}}return ans;}

20.有效的括号

一个个单词放到栈里,放左括号,遇到右括号检查栈顶是否为对应的左括号即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今日话题:---自卑

自卑是一种普遍存在的心理现象&#xff0c;它可能源于个人对自身能力、外貌、社会地位等方面的不满意或不自信。自卑感可能会导致消极的情绪和行为&#xff0c;如焦虑、抑郁、逃避现实等。然而&#xff0c;适度的自卑感也可能激发个人努力提升自己&#xff0c;从而实现自我成长…

TensorBoard的使用,add_image()的使用。

在TensorBoard中&#xff0c;add_image()函数用于将图像数据添加到可视化中。它可以用于显示模型输入、输出、中间特征图等图像数据&#xff0c;以帮助开发者理解模型的运行情况。 add_image()的用法&#xff1a; 使用ctrl点击add_image() 注意&#xff1a;图片类型要求为 t…

机器学习笔记 YOLOv9模型相关论文简读

一、YOLOv9简述 自 2015 年 Yolov1 推出以来,已经出现了多个版本。 基于Darknet的YOLOv2、YOLOv3和YOLOv4 YOLOv5 YOLOv8 基于 Ultralytics。 SCALED-YOLOv4 使用 Pytorch 而不是 Darknet。 YOLOR是YOLOv4的改进。 YOLOX是YOLOv3的改进。 YOLOv6专注于工业应用。 YOLOv7 来自 …

【实战-08】 flink自定义Map中的变量的行为

场景 自定义Map或者别的算子的时候&#xff0c;有时候需要定义一些类变量&#xff0c;在flink内部高并发的情况下需要正确理解这些变量的行为 代码 package com.pg.function;import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.common…

哇去,有了这篇文章,项目中引入了再多的字体包,我都不怕了!!!

通常情况下&#xff0c;我们在开发一个新项目的时候&#xff0c;项目那边通常都会提供一些项目所需的字体包&#xff0c;来满足项目对字体展示的特殊需求。 这部分大家都比较熟悉&#xff0c;就不详细讲了&#xff0c;直接上代码&#xff1a; /* 引入字体包 */ font-face {fo…

异常处理(黑马学习笔记)

当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部门操作&#xff0…

GEE高阶应用python wxee——MODIS气象数据可视化处理(2022年3-9月葡萄牙为例)以及可视化地图加载

MODIS wxee 是专为处理气象数据而设计的,但它在遥感数据方面也很有用。在本示例中,我们将了解 wxee 如何处理 MODIS 传感器的数据,以及如何利用 xarray 对象创建彩色复合图。 安装和设定 #!pip install wxeeimport ee import wxeeee.Authenticate() wxee.Initialize(proje…

前端笔记01---html 的加载

文章目录 HTML<meta><script>MIME CSSHTML 与 DOM 有什么不同MDNMozilla 脏检查依赖注入虚拟 DOM虚拟DOM性能开销 性能性能开销包括哪些方面性能瓶颈性能&#xff1f; 事件事件委托事件冒泡passive: true 合成器线程 HTML html head <meta> <meta> 元素…

贪心算法介绍

贪心算法是一种在求解问题时总是做出在当前看来是最好的选择的算法。它不从整体最优上加以考虑&#xff0c;所做出的选择只是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解&#xff0c;关键是贪心策略的选择&#xff0c;选择的贪心策略必须具备无后效性…

K8S相关小技巧《五》

需求&#xff1a; 作为Kubernetes管理员&#xff0c;前一段时间有收到一个需求&#xff0c;需要创建一个可用的storage class&#xff0c;用于提供给给隔离的用户使用共享磁盘。共享磁盘为NFS磁盘&#xff0c;本例以NFS为例&#xff0c;其他类型的storage class创建也是类似&a…

模型优化_如何提高网络/模型的泛化能力?(全面)

目录 1. 以数据为中心的泛化方法 1.1 使用更多数据 1.2 做好数据预处理 特征工程 1.3 数据增强 1.4 调整数据分布 2. 以模型为中心的泛化方法 2.1 使用更大批次 超参数调优 2.2 调整目标函数 2.3 调整网络结构 2.4 屏蔽网络节点 2.5 权值正则化 2.6 偏差-方差权衡…

防考试作弊切屏

防考试作弊切屏 方法一&#xff1a;监听页面失焦聚焦事件&#xff1a;防止任何操作 监听考试页面失焦事件记录切出时间页面聚焦时累积记录切入时间&#xff0c;累积时间大于1分钟自动交卷并移除时间页面销毁移出事件***bug&#xff1a;必须把事件回调定义为方法&#xff0c;在…

全国夜间灯光指数数据、GDP密度分布、人口密度分布、土地利用数据、降雨量数据

引言 DMSP/OLS的1992-2013年全球遥感影像&#xff0c;包括三种非辐射定标的夜间灯光影像。三种全年平均影像分别是&#xff1a;无云观测频数影像、平均灯光影像和稳定灯光影像。目前地理遥感生态网可提供全国稳定灯光影像免费下载。稳定灯光影像是标定夜间平均灯光强度的年度栅…

【论文阅读笔记】Explicit Visual Prompting for Low-Level Structure Segmentations

1.介绍 Explicit Visual Prompting for Low-Level Structure Segmentations 低级结构分割的显式视觉提示 2023年发表在IEEE CVPR Paper Code 2.摘要 检测图像中低级结构&#xff08;低层特征&#xff09;一般包括分割操纵部分、识别失焦像素、分离阴影区域和检测隐藏对象。虽…

c# Excel转换成DataTable

/// <summary> /// Excel转换成DataTable&#xff08;.xls&#xff09; /// </summary> /// <param name"filePath">Excel文件路径</param> /// <returns></returns> public static Da…

人造太阳光热模拟能量密度太阳模拟器

人造太阳模拟器其他名称&#xff1a;能量密度太阳能光热模拟能量密度太阳模拟器、能流密度太阳光模拟器、高通量太阳模拟器 高通量能留密度太阳能炉和太阳光模拟器产生高度集中的太阳能和人造光&#xff0c;用于新技术和材料的研究和测试。这使研究人员能够进行制氢实验、太阳…

备战蓝桥杯---线段树基础1

引入&#xff1a;RMQ问题&#xff1a; 什么是RMQ&#xff1f; 显然&#xff0c;我们无法用前缀维护&#xff0c;因此&#xff0c;我们需要用到线段树的知识&#xff1a; 什么是线段树&#xff1f; 线段树是用一种树状结构存储一个连续区间信息的数据结构 下面我们用图解释用…

C++知识点总结(22):模拟算法真题 ★★★★☆《越野比赛》

二、越野比赛 1. 审题 题目描述 最近赛车手 K a l n Kaln Kaln 加入了心心念念的 F a r Far Far 车队&#xff0c;马上就迎来了自己的首秀&#xff0c;参加一场直线加速赛&#xff1a;已知 F a r Far Far 车队会提供 n n n 种类型的赛车&#xff0c; K a l n Kaln Kaln 只…

【数据结构】队列OJ题《用队列实现栈》(题库+解析+代码)

1.前言 通过前面队列的实现和详解大家对队列应该有一定熟悉了&#xff0c;现在上强度开始做题吧 队列详解&#xff1a;http://t.csdnimg.cn/dvTsW 2.OJ题目训练225. 用队列实现栈 题目分析 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0…

git 设置代理 取消代理

设置代理 git config --global http.proxy 127.0.0.1:7890 git config --global https.proxy 127.0.0.1:7890注意&#xff1a;加上 --global 是对 git 设置全局代理&#xff0c;不加 --global 对指定仓库目录设置代理&#xff0c;局部代理 查看已修改 git 配置信息 git conf…