面试遇到的算法题

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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flume 入门教程

内容目录 Flume 简介 架构和基本概念 多种架构模式 Flume 安装部署 Flume 简介 Flume 是一个分布式、可靠且高可用的数据收集、聚合和传输系统&#xff0c;主要用于高效地处理大规模日志数据。设计之初&#xff0c;它主要服务于日志管理领域&#xff0c;但其灵活性和可扩展…

基于XML配置bean(二)

文章目录 1.工厂中获取bean1.静态工厂1.MyStaticFactory.java2.beans.xml3.测试 2.实例工厂1.MyInstanceFactory.java2.beans.xml3.测试 3.FactoryBean&#xff08;重点&#xff09;1.MyFactoryBean.java2.beans.xml3.测试 2.bean配置信息重用继承抽象bean1.beans.xml2.测试 3.…

多模态之BLIP—实现统一的视觉语言理解和生成,细节理解与论文详细阅读:Bootstrapping Language-Image Pre-training

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP&#xff1a;引导语言图像预训练&#xff0c;实现统一的视觉语言理解和生成 Paper: https://arxiv.org/pdf/2201.12086.pdf Github: https://github.com/sa…

Ansys workbench连接器端子保持力仿真教程

端子保持力&#xff08;Contact Retention Force&#xff09;是电子连接器机械特性中的常见参数&#xff0c;它表达的是电子连接器&#xff08;Connector&#xff09;端子&#xff08;Contact&#xff09;保持在正常位置的能力。EIA专门为连接器端子保持力的测试制定了标准&…

输出100~200之间的质数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 100;int i 0;int result 0;//嵌套循环判断100~200之间的质数&#xff1b;for (n …

网络运输层之(3)GRE协议

网络运输层之(3)GRE协议 Author: Once Day Date: 2024年4月8日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

316_C++_xml文件解析成map,可以放到QT表格上, 且 xml、xlsx文件可以互相解析

xml文件例如&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"yes"?> <TrTable> <tr id"0" label"TR_PB_CH" text"CH%2"/> <tr id"4" label"TR_PB_CHN"…

HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp

ezssti 很简单的ssti 源码给了&#xff0c;调用Eval即可执行命令 package mainimport ("fmt""net/http""os/exec""strings""text/template" )type User struct {Id intName stringPasswd string }func (u User) Ev…

如何在阿里云主机上安装FreeBSD14系统

文章目录 在阿里云主机上安装FreeBSD14系统准备阿里云云主机识别目标磁盘下载 FreeBSD14解压缩 FreeBSD14系统镜像创建可启动的磁盘启动 FreeBSD14在阿里云主机上安装FreeBSD14系统 阿里云主机不支持 FreeBSD14 系统的镜像,因此需要手动进行安装。 准备阿里云云主机 在阿里云…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

文字转语音工具:GPT-SoVITS

诸神缄默不语-个人CSDN博文目录 OpenAI官方的TTS模型我在这篇博文中给出了使用教程&#xff1a;ChatGPT 3.5 API的调用不全指南&#xff08;持续更新ing…&#xff09; - 知乎 但是OpenAI的TTS对中文支持不好&#xff0c;有一种老外说中文的美&#xff0c;所以本文介绍另一个…

Amazon SES邮箱API发送邮件的步骤是什么?

Amazon SES邮箱API发送邮件怎么配置&#xff1f;如何用邮箱API发送邮件&#xff1f; 在数字化时代&#xff0c;电子邮件已成为企业与个人之间沟通的重要桥梁。那么&#xff0c;使用Amazon SES邮箱API发送邮件的步骤究竟是怎样的呢&#xff1f;接下来&#xff0c;就让AokSend来…

IDEA远程调试debug

IDEA远程调试debug jar包启动脚本配置IDEA配置 通俗的说&#xff1a;本地有代码&#xff0c;服务器项目出现问题&#xff0c;环境的中间件配置不同&#xff0c;用idea远程调试&#xff0c;能快速定位问题&#xff0c;解决问题。 jar包启动脚本配置 jdk5-8写法 java -Xdebug -…

ChatGPT在遥感领域中的应用

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

MCU的最佳存储方案CS创世 SD NAND

MCU的最佳存储方案CS创世 SD NAND 写在最前面MCU是什么CS创世 SD NAND 6大优势 写在最前面 转载自 雷龙官网 MCU是什么 大家都知道MCU是一种"麻雀"虽小&#xff0c;却"五脏俱全"的主控。它的应用领域非常广泛&#xff0c;小到手机手表&#xff0c;大到航空…

【Kafka】Kafka Tool工具的使用

抖音视频 https://www.douyin.com/user/self?modal_id7123007128150901256&showTablike CSDN文档 https://blog.csdn.net/qq_43961619/article/details/109381849

Blind Image Super-Resolution: A Survey and Beyond

TPAMI2023 问题定义 未知图像的退化过程&#xff08;和之前假定bicubic等一个固定且已知的退化过程相对比&#xff09;&#xff0c;由LR恢复HR&#xff1b;退化来源&#xff08;不同的图像采集设备&#xff0c;数字信号处理成可见图像的过程中图像处理算法引入的噪声&#xff…

机器学习——模型融合:Stacking算法

机器学习——模型融合&#xff1a;Stacking算法 在机器学习中&#xff0c;模型融合是一种常用的方法&#xff0c;它可以提高模型的泛化能力和预测性能。Stacking算法&#xff08;又称为堆叠泛化&#xff09;是一种强大的模型融合技术&#xff0c;它通过组合多个基本分类器的预…

PyCharm连接数据库代码解析

1.先导入pymysql模块 在PyCharm中用清华镜像快速安装包 依次把ip地址和账号名、密码、数据库名、端口、编码输入 2.创建游标 游标&#xff1a;是数据库中的一个概念&#xff0c;我们执行sql查询语句时&#xff0c;大部分情况都会得到很多条结果&#xff0c;我们取出这些返回结…

python 无处不在的二分搜索

我们知道二分查找算法。二分查找是最容易正确的算法。我提出了一些我在二分搜索中收集的有趣问题。有一些关于二分搜索的请求。我请求您遵守准则&#xff1a;“我真诚地尝试解决问题并确保不存在极端情况”。阅读完每个问题后&#xff0c;最小化浏览器并尝试解决它。 …