当前位置: 首页 > 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())…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...