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

牛客剑指offer刷题模拟篇

文章目录

      • 顺时针打印矩阵
        • 题目
        • 思路
        • 代码实现
      • 扑克牌顺子
        • 题目
        • 思路
        • 代码实现
      • 把字符串转换成整数
        • 题目
        • 思路
        • 代码实现
      • 表示数值的字符串
        • 题目
        • 思路
        • 代码实现

顺时针打印矩阵

题目

描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
则依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
数据范围:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
牛客题目链接

思路

顺时针打印矩阵
我们主要分析以下几种情况

  1. 只有一行的时候,我们只需要遍历打印即可;
  2. 只有一列的时候,我们同样只需要遍历打印即可;
  3. 对于多行多列的情况,我们需要按照规定的顺序进行打印;
代码实现
    private ArrayList<Integer> result = new ArrayList<>();public ArrayList<Integer> printMatrix(int[][] matrix) {if (matrix == null || matrix[0] == null || matrix[0].length == 0) {return result;}int tR = 0; //表示第一行下标int tC = 0; //表示第一列下标int index = 0; //表示当前集合下标int dR = matrix.length - 1; //最后一行下标int dC = matrix[0].length - 1; //最后一列下标while (tR <= dR && tC <= dC) { printMatrix(matrix, tR++, tC++, dR--, dC--, index); //不断往中间靠拢}return result;}private void printMatrix(int[][] matrix, int tR, int tC, int dR, int dC, int index) {if (tR == dR) {//只有一行的情况for (int i = dR; i <= dC; i++) {result.add(matrix[tR][i]);}} else if (tC == dC) {//只有一列的情况for (int i = tR; i <= dR; i++) {result.add(matrix[i][tC]);}} else {//遵守矩阵打印规则int curR = tR;int curC = tC;while (curC != dC) {result.add(matrix[curR][curC]);curC++;}while (curR != dR) {result.add(matrix[curR][curC]);curR++;}while (curC != tC) {result.add(matrix[curR][curC]);curC--;}while (curR != tR) {result.add(matrix[curR][curC]);curR--;}}}

扑克牌顺子

题目

现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:

  1. A为1,J为11,Q为12,K为13,A不能视为14
  2. 大、小王为 0,0可以看作任意牌
  3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
    4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]

要求:空间复杂度 O(1),时间复杂度 O(nlogn),本题也有时间复杂度 O(n) 的解法;
牛客题目链接

思路

根据题目,我们可以分析出顺子需要满足以下两个条件:

  1. 顺子中的非零牌最大数和最小数相差不超过4;
  2. 顺子中的非零牌不能有重复数字;
    对于重复数字判断,我们可以采用HashMap进行处理;
代码实现
public boolean IsContinuous (int[] numbers) {HashMap<Integer,Integer> hashMap = new HashMap<>();//定义最大值和最小值int max = 0;int min = 13;for(int i = 0; i < numbers.length;i++){if(numbers[i] > 0 ){//用于判断是否重复if(hashMap.get(numbers[i])!=null){return false;}else{hashMap.put(numbers[i],i);//找出最大值和最小值if(numbers[i] > max){max = numbers[i];}if(numbers[i] < min){min = numbers[i];}}}}//计算相差,如果大于4则不满足顺子要求if(max - min > 4){return false;}return true;}

把字符串转换成整数

题目

描述
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:
1.若干空格
2.(可选)一个符号字符(‘+’ 或 ‘-’)
3. 数字,字母,符号,空格组成的字符串表达式
4. 若干空格

转换算法如下:
1.去掉无用的前导空格
2.第一个非空字符为+或者-号时,作为该整数的正负号,如果没有符号,默认为正数
3.判断整数的有效部分:
3.1 确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回0
3.2 将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
3.3 整数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231的整数应该被调整为 −231 ,大于 231 − 1 的整数应该被调整为 231 − 1
4.去掉无用的后导空格;
牛客题目链接

思路

按照转换要求一步步处理;

  1. 首先遍历过滤掉前面的空格;
  2. 判断当前字符是否为"+“或”-",用于记录数据的正负值,记得移动下标;
  3. 遍历获取每个字符对应的数字累加,并且过程中需要判断是否满足在32 位有符号整数范围内;
  4. 返回最终结果;
代码实现
public int StrToInt (String s) {int len = s.length();if(len == 0){return 0;}int sign = 1;long num = 0;int i = 0;//先跳过若干个空格while( i < len && s.charAt(i)== ' '){i++;}//判断第一位符号位是正数还是负数if(i < len){if(s.charAt(i) == '-'){sign = -1;i++;}else if(s.charAt(i) == '+'){i++;}}//取出数字部分,判断大小是否越界以及计算结果while(i < len){if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){int temp = s.charAt(i) - '0';num = num * 10 + temp;if(sign == 1 && num > Integer.MAX_VALUE){return Integer.MAX_VALUE;}else if(sign == -1 && -num < Integer.MIN_VALUE){return Integer.MIN_VALUE;}i++;} else{break;}}if(sign == 1){return (int)num;}else{return (int)-num;}

表示数值的字符串

题目

描述
请实现一个函数用来判断字符串str是否表示数值(包括科学计数法的数字,小数和整数)。

科学计数法的数字(按顺序)可以分成以下几个部分:
1.若干空格
2.一个整数或者小数
3.(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个整数(可正可负)
4.若干空格

小数(按顺序)可以分成以下几个部分:
1.若干空格
2.(可选)一个符号字符(‘+’ 或 ‘-’)
3. 可能是以下描述格式之一:
3.1 至少一位数字,后面跟着一个点 ‘.’
3.2 至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字
3.3 一个点 ‘.’ ,后面跟着至少一位数字
4.若干空格

整数(按顺序)可以分成以下几个部分:
1.若干空格
2.(可选)一个符号字符(‘+’ 或 ‘-’)
3. 至少一位数字
4.若干空格

例如,字符串[“+100”,“5e2”,“-123”,“3.1416”,“-1E-16”]都表示数值。
但是[“12e”,“1a3.14”,“1.2.3”,“±5”,“12e+4.3”]都不是数值。
牛客题目链接

思路

不需要思路,就是一堆判断直接干,静下心,耐住性子就可以搞定;

代码实现

自由发挥

public boolean isNumeric (String str) {if (str == null || str.length() == 0) {return false;}//去除字符串中的所有空格String res = str.replaceAll(" ", "");if (res.length() == 0) {return false;}if (res.contains("e") || res.contains("E")) {//当前可能是科学计数法return isENum(res);} else if (res.contains(".")) {//当前可能是小数return isNodeNum(res);} else {//当前可能是整数return isCommonNum(res);}}private boolean isENum(String res) {if (res == null || res.length() == 0) {return false;}res = res.toUpperCase();if (res.charAt(res.length() - 1) == 'E') {return false;}String[] split = res.split("E");if (split.length != 2) {return false;}return (isCommonNum(split[0])  || isNodeNum(split[0])) &&(isCommonNum(split[1]));}private boolean isCommonNum(String res) {if (res == null || res.length() == 0) {return false;}if (res.charAt(0) == '+' || res.charAt(0) == '-') {res  = res.substring(1, res.length());}if (res.length() == 0) {return false;}for (int i = 0 ; i < res.length(); i++) {if (res.charAt(i) < '0' || res.charAt(i) > '9') {return false;}}return true;}private boolean isNodeNum(String res) {if (res == null || res.length() == 0 || ".".equals(res)) {return false;}int nodeNum = 0;for (int i = 0 ; i < res.length(); i++) {if (res.charAt(i) == '.') {if (nodeNum == 1) {return false;} else {nodeNum++;}}}String[] split = res.split("\\.");if (split.length == 1) {return (isCommonNum(split[0]) || "".equals(split[0]));}boolean isSign = "".equals(split[0]) || "+".equals(split[0]) || "-".equals(split[0]);return (isCommonNum(split[0]) || isSign) &&(isCommonNum(split[1]) || "".equals(split[1]));}

相关文章:

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c;例如&#xf…...

Locust单机多核压测,以及主从节点的数据通信处理!

一、背景 这还是2个月前做的一次接口性能测试&#xff0c;关于locust脚本的单机多核运行&#xff0c;以及主从节点之间的数据通信。 先简单交代下背景&#xff0c;在APP上线之前&#xff0c;需要对登录接口进行性能测试。经过评估&#xff0c;我还是优先选择了locust来进行脚…...

ERROR: [pool www] please specify user and group other than root

根据提供的日志信息&#xff0c;PHP-FPM 服务未能启动的原因是配置文件中的一个错误。错误消息明确指出了问题所在&#xff1a; [29-Nov-2023 14:28:26] ERROR: [pool www] please specify user and group other than root [29-Nov-2023 14:28:26] ERROR: FPM initialization …...

京东商品详情接口在电商行业中的重要性及实时数据获取实现

一、引言 随着电子商务的快速发展&#xff0c;商品信息的准确性和实时性对于电商行业的运营至关重要。京东作为中国最大的电商平台之一&#xff0c;其商品详情接口在电商行业中扮演着重要的角色。本文将深入探讨京东商品详情接口的重要性&#xff0c;并介绍如何通过API实现实时…...

WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案

在当今的数字化时代&#xff0c;音频技术的普遍性已不容忽视。从简单的音乐播放&#xff0c;到复杂的语音交互&#xff0c;音频技术的身影无处不在。在这个背景下&#xff0c;WT2003H MP3语音芯片方案应运而生&#xff0c;它提供了一种强大、灵活且易于集成的音频解决方案。 1…...

机器学习深度学学习分类模型中常用的评价指标总结记录与代码实现说明

在机器学习深度学习算法模型大开发过程中&#xff0c;免不了要对算法模型进行对应的评测分析&#xff0c;这里主要是总结记录分类任务中经常使用到的一些评价指标&#xff0c;并针对性地给出对应的代码实现&#xff0c;方便读者直接移植到自己的项目中。 【混淆矩阵】 混淆矩阵…...

fastapi 后端项目目录结构 mysql fastapi 数据库操作

原文&#xff1a;fastapi 后端项目目录结构 mysql fastapi 数据库操作_mob6454cc786d85的技术博客_51CTO博客 一、安装sqlalchemy、pymysql模块 pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pymysql -i https://pypi.tuna.tsinghua.edu.…...

研习代码 day47 | 动态规划——子序列问题3

一、判断子序列 1.1 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde&…...

L1-017:到底有多二

题目描述 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数&#xff0c;则程度增加0.5倍&#xff1b;如果还是个偶数&#xff0c;则再增加1倍。例如数字-13142223336是个11位数&#xff0c;其中有3个2&#xff0c;并且是负数&#xff0c;也是…...

Python多线程使用(二)

使用多个线程的时候容易遇到一个场景&#xff1a;多个线程处理一份数据 使用多线程的时候同时处理一份数据&#xff0c;在threading中提供了一个方法&#xff1a;线程锁 Demo&#xff1a;下订单 现在有多笔订单下单&#xff0c;库存减少 from threading import Thread from t…...

记录一次docker搭建tomcat容器的网页不能访问的问题

tomcat Tomcat是Apache软件基金会的Jakarta项目中的一个重要子项目&#xff0c;是一个Web服务器&#xff0c;也是Java应用服务器&#xff0c;是开源免费的软件。它是一个兼容Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;的Web服务器&#xff0c;可以作为独立的W…...

GPT3年终总结

User You 程序员年度绩效总结 ChatGPT ChatGPT 程序员年度绩效总结通常包括以下几个方面&#xff1a; 目标达成情况&#xff1a; 回顾年初设定的目标&#xff0c;评估在项目完成、技能提升等方面的达成情况。 工作贡献&#xff1a; 强调在项目中的个人贡献&#xff0c;包括…...

Kafka生产者发送消息的流程

Kafka 生产者发送消息的流程涉及多个步骤&#xff0c;从消息的创建到成功存储在 Kafka 集群中。以下是 Kafka 生产者发送消息的主要步骤&#xff1a; 1. 创建消息 生产者首先创建一个消息&#xff0c;消息通常包含一个键&#xff08;可选&#xff09;和一个值&#xff0c;以及…...

基于SSM的数学竞赛网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

01-使用Git操作本地库,如初始化本地库,提交工作区文件到暂存区和本地库,查看版本信息,版本切换命令等

Git的使用 概述 Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用 Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能Git具有廉价的本地库,方便…...

排序算法介绍(二)冒泡排序

0. 简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排…...

搜索引擎高级用法总结: 谷歌、百度、必应

搜索引擎高级用法总结: 谷歌、百度、必应 google search 基本搜索 逻辑与:and逻辑或: or逻辑非: -完整匹配:“关键词”通配符:* ?高级搜索 intext:后台登录 将只返回正文中包含 后台登录 的网页 intitle intitle:后台登录 将只返回标题中包含 后台登录 的网页,intitle…...

com.intellij.openapi.application.ApplicationListener使用

一般监听期通过如下代码生效 <applicationListeners> <!-- <listener class"com.itheima.taunt.MyApplicationListener"--> <!-- topic"com.intellij.openapi.application.ApplicationListener"…...

常见js hook脚本

一.js hook 过无限debugger var _constructor constructor; Function.prototype.constructor function(s) {if (s "debugger") {console.log(s);return null;}return _constructor(s); }//去除无限debugger Function.prototype.__constructor_back Function.pro…...

Java——SpringLayout弹簧布局

import java.awt.*;import javax.swing.*;public class a {public static void main(String[] args) {new a();}public a() {JFrame JF new JFrame("弹簧布局");// 创建JFrame窗口//设置JPanel的布局管理器为SpringLayoutJPanel JP new JPanel(new SpringLayout())…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...