面试遇到的算法题

1.字符串转换整数

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  6. 返回整数作为最终结果。
class Solution {public int myAtoi(String s) {if(s.length() == 0)return 0;int index = 0,n = s.length(),sign = 1,res = 0;//处理前置空格while(index < n && s.charAt(index) == ' ') index++;//处理符号if(index < n && (s.charAt(index)=='+' || s.charAt(index)=='-')){sign = s.charAt(index++) == '+'?1:-1;}//处理数字while(index<n && Character.isDigit(s.charAt(index))){int digit = s.charAt(index) - '0';//判断是否溢出if(res > (Integer.MAX_VALUE - digit)/10){return sign == 1? Integer.MAX_VALUE : Integer.MIN_VALUE;}res = res*10 + digit;index++;}return res*sign;}
}

2.求岛屿周长

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。

网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

思路:直接暴力解法,简单易懂:求边长,其实就是判断每个陆地的四周是什么,从上下左右四个方向找,遇到非陆地就可以+1(其实本题的dfs解法也是这个道理,个人感觉没必要用dfs去做搜索)

class Solution {  public int islandPerimeter(int[][] grid) {int sum = 0;for(int i=0;i<grid.length;i++){for(int j=0;j<grid[0].length;j++){if(grid[i][j] == 1) sum = dfs(grid,i,j);}}return sum;}public int dfs(int[][] grid,int i,int j){if(i<0 || i>=grid.length || j<0 || j>=grid[0].length || grid[i][j] == 0)return 1;if(grid[i][j] == -1)return 0;grid[i][j] = -1;int count = 0;count += dfs(grid,i+1,j);count += dfs(grid,i,j+1);count += dfs(grid,i-1,j);count += dfs(grid,i,j-1);return count;}
}

3.设计微信抢红包算法


import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;public class Main {/*Random 随机生成一个区间在[min , max]的数值randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; *//*** 生成min到max范围的浮点数**/public static double nextDouble(final double min, final double max) {return min + ((max - min) * new Random().nextDouble());}public static String format(double value) {return new java.text.DecimalFormat("0.00").format(value); // 保留两位小数}//二倍均值法public static List<Double> doubleMeanMethod(double money,int number){List<Double> result = new ArrayList<Double>();if(money<0&&number<1)return null;double amount,sum=0;int remainingNumber=number;int i=1;while(remainingNumber>1){amount= nextDouble(0.01,2*(money/remainingNumber));sum+=amount;System.out.println("第"+i+"个人领取的红包金额为:"+format(amount));money -= amount;remainingNumber--;result.add(amount);i++;}result.add(money);System.out.println("第"+i+"个人领取的红包金额为:"+format(money));sum+=money;System.out.println("验证发出的红包总金额为:"+format(sum));return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int number;double money;System.out.print("请输入红包总金额:");money = sc.nextDouble();System.out.print("请输入红包数量:");number = sc.nextInt();//System.out.println(money + " " + number);//二倍均值法doubleMeanMethod(money,number);//System.out.println(doubleMeanMethod(money,number).toString());//也是可以直接输出list的,为了观察方便,我就在循环中输出了,存在list里主要是为了后续方便数据的使用System.out.println();}}

4.长度最小的子数组之和大于target

思路:滑动窗口+双指针遍历数组,创建一个sum表示子数组之和,然后累加,当sum的值大于等于target的时候,进入while循环,内部先计算最短长度,最短长度len初始化为最大值,然后每次进行比较len = Math.min(len,end-start+1),计算完之后收缩左边界就是sum-=nums[start],然后start++,直到不满足while条件位置。遍历结束后返回len

class Solution {public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int start = 0;int len = Integer.MAX_VALUE;int sum = 0;for(int end = 0;end < n;end++){sum += nums[end];while(sum >= target){len = Math.min(len,end-start+1);sum-=nums[start];start++;}}return len==Integer.MAX_VALUE?0:len;}
}

5.无重复字符的最长子串

思路:使用滑动窗口+双指针+哈希表的思路,哈希表用来记录遍历到的出现的字符的最后一次出现的位置,就是最远位置,然后指针双指针表示滑动窗口的左右边界,一开始遍历不断扩充右边界,直到遇到第一个重复字符,当遇到之后,把start的位置调整到Math.max(start,map.containsKey(s.charAt(i))+1)的位置,这里表示当前start的的位置和之前一次出现重复字符的位置的下一个的最大值,就是确保滑动窗口内部是无重复的且滑动窗口的移动不会出现退回。然后再计算长度len = Math.max(len,i-start+1);然后再把当前的字符和其下标添加到哈希表中。最后返回len

class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> map = new HashMap<>();int start = 0;int len = 0;for(int i=0;i<s.length();i++){if(map.containsKey(s.charAt(i))){start = Math.max(start,map.get(s.charAt(i))+1);}len = Math.max(len, i - start +1);map.put(s.charAt(i),i);}return len;}
}

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

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

相关文章

GitOps 和 DevOps 有什么区别?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

03 JavaScript学习:浏览器中执行 JavaScript

我比较习惯Chrome浏览器。 Chrome 是由 Google 开发的免费网页浏览器&#xff0c;调试代码非常方便。 Chrome 官网地址&#xff1a;https://www.google.com/intl/zh-CN/chrome/。 控制台输出 浏览器的控制台是开发者工具中的一个重要组成部分&#xff0c;它可以用来查看网页…

【氮化镓】GaN HEMT失效物理和可靠性

概述: 本文是一篇关于AlGaN/GaN基高电子迁移率晶体管(HEMTs)的失效物理和可靠性研究的综述文章,发表在2013年10月的《IEEE Transactions on Electron Devices》上。文章由Enrico Zanoni等人撰写,主要关注了影响栅极边缘和肖特基结的失效机制,并探讨了提高这些器件可靠性…

springboot的开发流程

文章目录 springboot的开发流程 1.创建maven项目2.引用依赖 1&#xff09;起步依赖2&#xff09;项目依赖3.启动类4.配置文件5.业务代码 1)dto2)controller6.restful测试7.部署 1&#xff09;打包2&#xff09;部署 springboot的开发流程 1.创建maven项目 新建maven项目 配置…

若依框架后台管理系统_修改后台管理密码

若依框架后台管理系统_修改后台管理密码 1. 找见加密函数&#xff1a; /*** 生成BCryptPasswordEncoder密码** param password 密码* return 加密字符串*/public static String encryptPassword(String password){BCryptPasswordEncoder passwordEncoder new BCryptPasswordE…

linux 的Jdk1.8详细安装部署教程

一、环境准备 1.下载安装包 下载地址&#xff0c;这是1.8的你也可以选择安装别的版本的 https://www.oracle.com/java/technologies/downloads/#java8-windows 选择想要的系统和对应的位数&#xff0c;点击下载即可 2.上传安装包 选择自己要安装的路径&#xff0c;&#x…

软阈值函数的应用实例!

让我们通过一个简单的例子来展示软阈值的功能。 假设我们有一个包含一些信号的向量 ( x )&#xff0c;如下所示&#xff1a; [ x [3, -2, 5, -1, 7, -4, 2, 0] ] 现在&#xff0c;我们希望对这个信号进行软阈值处理&#xff0c;以去除幅值较小的分量&#xff0c;并减少噪音。…

Feign的使用

目录 一.概念 二.使用 2.1依赖 2.2启动类注释 2.3.创建service包&#xff0c;写接口 2.4.生产者方法 2.5效果 三.openfeign的服务降级 3.1理论 3.2使用 一.概念 Feign是Spring Cloud提供的声明式、模板化的HTTP生产者&#xff0c;它使得调用远程服务就像调用本地服…

创建SpringBoot控制台程序并打包运行(Windows)

1. 新建一个Springboot项目Study (PS&#xff1a; 这个不需要演示了吧?) 注意pom.xml&#xff0c;是spring-boot-starter&#xff0c;不是spring-boot-web-starter <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

蓝桥杯备赛(C/C++组)

README&#xff1a; 本笔记是自己的备考笔记&#xff0c;按照官网提纲进行复习&#xff01;适合有基础&#xff0c;复习用。 一、总考点 试题考查选手解决实际问题的能力&#xff0c;对于结果填空题&#xff0c;选手可以使用手算、软件、编程等方法解决&#xff0c;对于编程大…

BTP连接cloud connector中配置的SAP

登录地址 登录之后可以看到我们已经配置成功的后端系统SAP。 从cloud connector中获取location ID ,然后在BTP中配置Destination 选择目标标签页&#xff0c;点击‘新建目标’&#xff0c;如下图&#xff1a; 新建连接 暂时不知道错误原因 创建目标-HTTP  新建目标&…

软考134-上午题-【软件工程】-进度管理

一、甘特图&#xff08;了解&#xff09; 1-1、定义 Gantt图是一种简单的水平条形图&#xff0c;它以日历为基准描述项目任务。 水平轴表示日历时间线(如时、天、周、月和年等)&#xff0c;每个条形表示一个任务&#xff0c;任务名称垂直地列在左边的列中&#xff0c;图中水…

DIY mybatisPlus的分页插件

目录 起因修改定义接口重写MyPage的方法 实践测试 起因 在我们通过list返回的列表页&#xff0c;出现了一个需要数据合计的需求&#xff0c;例如一个订单1块钱&#xff0c;那么所有订单加起来多少钱&#xff0c;那么list一般都通过分页返回&#xff0c;而统计所有订单又不能只…

量化研究---小果因子分析系统使用教程,可转债macd因子为例子

文章链接 量化研究---小果因子分析系统使用教程&#xff0c;可转债macd因子为例子 (qq.com) 因子分析是一种多维变量统计分析方法&#xff0c;用于从多个变量中提取少数公共因子。 具体来说&#xff0c;因子分析的核心目的是通过研究变量之间的相关性&#xff0c;将多个相关联…

Spring 事务 (编程式 声明式, Spring 事务传播机制)

事务 事务是一组操作的集合, 是一个不可分割的整体 事务会把所有的操作作为一个整体, 一起向数据库提交或是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败 Spring 中事务的实现 编程式 (手动写代码操作事务)声明式 (通过注解自动开启和提交事务) 编程式事务 开启事务 …

Module外贸主题开心版下载-v5.7.0版本WordPress企业模板

主题下载地址&#xff1a;Module外贸主题开心版下载-v5.7.0版本 Module主题介绍&#xff1a;采用全新模块化开发&#xff0c;首页模块可视化拖拽自由组合&#xff0c;可自定义搭建出不同行业适用的企业网站。同时主题全面支持WPML多语言切换&#xff0c;可轻松搭建外贸网站。W…

torchEEG工具箱

文章信息: 题目&#xff1a;TorchEEGEMO&#xff1a;基于脑电图的情绪识别深度学习工具箱 期刊&#xff1a;Expert Systems with Applications 环境&#xff1a;pytorch 1.11.0 CUDA 11.3 摘要&#xff1a; ​ 一个python工具箱TorchEEG&#xff0c;将工作流程分为五个模块…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器&#xff0c;提供一个时钟日历&#xff0c;两个可编程报警中断&#xff0c;一个具有中断功能周期性可编程唤醒标志&#xff0c;RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

OKCC搭建配置什么样的服务器合适

OKCC呼叫中心系统是一种采用软硬件结合的架构方式、及分布式的IP技术&#xff0c;从多角度为企业提供整合的一体化解决方案。因此&#xff0c;搭建OKCC呼叫中心系统所使用的服务器应该满足以下几点要求&#xff1a; 稳定性&#xff1a;服务器需要具有较高的稳定性和可靠性&…

STM32之不使用MicroLIB

一、microlib介绍 microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。 microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。 二、不使用microlib的原因 由于microlib不支持C++开发,因此在使用C…