牛客剑指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
牛客题目链接
思路
我们主要分析以下几种情况
- 只有一行的时候,我们只需要遍历打印即可;
- 只有一列的时候,我们同样只需要遍历打印即可;
- 对于多行多列的情况,我们需要按照规定的顺序进行打印;
代码实现
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副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:
- A为1,J为11,Q为12,K为13,A不能视为14
- 大、小王为 0,0可以看作任意牌
- 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
要求:空间复杂度 O(1),时间复杂度 O(nlogn),本题也有时间复杂度 O(n) 的解法;
牛客题目链接
思路
根据题目,我们可以分析出顺子需要满足以下两个条件:
- 顺子中的非零牌最大数和最小数相差不超过4;
- 顺子中的非零牌不能有重复数字;
对于重复数字判断,我们可以采用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.去掉无用的后导空格;
牛客题目链接
思路
按照转换要求一步步处理;
- 首先遍历过滤掉前面的空格;
- 判断当前字符是否为"+“或”-",用于记录数据的正负值,记得移动下标;
- 遍历获取每个字符对应的数字累加,并且过程中需要判断是否满足在32 位有符号整数范围内;
- 返回最终结果;
代码实现
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刷题模拟篇
文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如…...

Locust单机多核压测,以及主从节点的数据通信处理!
一、背景 这还是2个月前做的一次接口性能测试,关于locust脚本的单机多核运行,以及主从节点之间的数据通信。 先简单交代下背景,在APP上线之前,需要对登录接口进行性能测试。经过评估,我还是优先选择了locust来进行脚…...
ERROR: [pool www] please specify user and group other than root
根据提供的日志信息,PHP-FPM 服务未能启动的原因是配置文件中的一个错误。错误消息明确指出了问题所在: [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 …...
京东商品详情接口在电商行业中的重要性及实时数据获取实现
一、引言 随着电子商务的快速发展,商品信息的准确性和实时性对于电商行业的运营至关重要。京东作为中国最大的电商平台之一,其商品详情接口在电商行业中扮演着重要的角色。本文将深入探讨京东商品详情接口的重要性,并介绍如何通过API实现实时…...
WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案
在当今的数字化时代,音频技术的普遍性已不容忽视。从简单的音乐播放,到复杂的语音交互,音频技术的身影无处不在。在这个背景下,WT2003H MP3语音芯片方案应运而生,它提供了一种强大、灵活且易于集成的音频解决方案。 1…...

机器学习深度学学习分类模型中常用的评价指标总结记录与代码实现说明
在机器学习深度学习算法模型大开发过程中,免不了要对算法模型进行对应的评测分析,这里主要是总结记录分类任务中经常使用到的一些评价指标,并针对性地给出对应的代码实现,方便读者直接移植到自己的项目中。 【混淆矩阵】 混淆矩阵…...
fastapi 后端项目目录结构 mysql fastapi 数据库操作
原文: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 ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde&…...

L1-017:到底有多二
题目描述 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是…...
Python多线程使用(二)
使用多个线程的时候容易遇到一个场景:多个线程处理一份数据 使用多线程的时候同时处理一份数据,在threading中提供了一个方法:线程锁 Demo:下订单 现在有多笔订单下单,库存减少 from threading import Thread from t…...
记录一次docker搭建tomcat容器的网页不能访问的问题
tomcat Tomcat是Apache软件基金会的Jakarta项目中的一个重要子项目,是一个Web服务器,也是Java应用服务器,是开源免费的软件。它是一个兼容Java Servlet和JavaServer Pages(JSP)的Web服务器,可以作为独立的W…...
GPT3年终总结
User You 程序员年度绩效总结 ChatGPT ChatGPT 程序员年度绩效总结通常包括以下几个方面: 目标达成情况: 回顾年初设定的目标,评估在项目完成、技能提升等方面的达成情况。 工作贡献: 强调在项目中的个人贡献,包括…...

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

基于SSM的数学竞赛网站设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

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

排序算法介绍(二)冒泡排序
0. 简介 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排…...
搜索引擎高级用法总结: 谷歌、百度、必应
搜索引擎高级用法总结: 谷歌、百度、必应 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())…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...