牛客网华为OD前端岗位,面试题库练习记录02

题目一 删除字符串中出现次数最少的字符(HJ23)

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herewhile ((line = await readline())) {let arr = line.split("");let obj = {};arr.forEach((item) => {if (obj[item] != undefined) {obj[item]++;} else {obj[item] = 1;}});let min = 21;for (let key in obj) {min = Math.min(min, obj[key]);}for (let key in obj) {if (min == obj[key]) {arr.forEach((item, index) => {if(item == key){arr.splice(index,1)}});}}console.log(arr.join(''))}
})();

知识笔记
① Math.min()
console.log(Math.min(-1, 4, 6, 12));//输出值:-1

题目二 字符串排序(HJ26)

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herewhile ((line = await readline())) {let result = line.split("");//先收集英文字母,对其进行排序let words = line.match(/[a-z]+/gi).join("").split("");words.sort(function (a, b) {a = a.toLowerCase();b = b.toLowerCase(); //规则1 不区分大小写return a < b ? -1 : 0; //升序排列(因为前面全都转化成小写,故不会改变同一字母大小写的相对顺序)});console.log('words',words)result.forEach((item, index) => {//将words中字母替换result中的字母,非英文字符不替换if (/[a-z]/i.test(item)) {//是英文字符,则替换result[index] = words[0];words.shift();}});console.log(result.join(""));}
})();

知识笔记:
解题代码借鉴的讨论区的大佬的。
大概梳理下这个想法。

① 题目理解:
将所有的字母,不区分大小写,按照从a-z排列,然后按照原文的格式输出。
② 思路解读:
1)提取所有的字母,然后按照a-z排列;
2)按照原字符串的位置序列,进行填充;

比较容易忽略的点:正则的函数。

题目三 HJ27 查找兄弟单词

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herelet arrline = [];while ((line = await readline())) {arrline = line.split(" ");}let _n = Number(arrline[0]); // 第一个是表示有多少个单词;let _allword = arrline.slice(1, _n); // 单词字典let _keyword = arrline[_n + 1]; // 关键单词let _index = arrline[arrline.length - 1]; // klet _keyarr = [];_keyarr = _keyword.split(""); // 关键词的数组;function permuteArray(arr) {// 获取全排列if (arr.length === 1) {return [arr];}const result = [];for (let i = 0; i < arr.length; i++) {const currentElement = arr[i];const remainingElements = arr.slice(0, i).concat(arr.slice(i + 1));const permutations = permuteArray(remainingElements);for (const permutation of permutations) {result.push(([currentElement].concat(permutation)).join(''));}}return result;}let _broarr = [];// 兄弟数组const permutations = permuteArray(_keyarr);_allword.forEach((item)=>{if(permutations.indexOf(item) != -1){// 兄弟数组重组_broarr.push(item)}})console.log(_broarr.length);if(_broarr[_index] != undefined && _broarr[_index] != null){console.log(_broarr[_index])   }
})();

知识笔记:
需要注意的点就是,数组的全排列。

    function permuteArray(arr) {// 获取全排列if (arr.length === 1) {return [arr];}const result = [];for (let i = 0; i < arr.length; i++) {const currentElement = arr[i];const remainingElements = arr.slice(0, i).concat(arr.slice(i + 1));const permutations = permuteArray(remainingElements);for (const permutation of permutations) {result.push(([currentElement].concat(permutation)).join(''));}}return result;}

大概思路就是,获取单词x的单字母全排列,然后在字典单词中匹配,然后挑出来。
然后输出。

题目四 HJ29 字符串加解密

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herelet twoarr = [];while ((line = await readline())) {twoarr.push(line);}let linearr = twoarr[0].split("");// 加密let _newarr = [];linearr.forEach((item) => {if (/[a-z]/.test(item)) {if (item == "z") {_newarr.push("A");} else {_newarr.push(String.fromCharCode(item.charCodeAt(0) + 1).toUpperCase());}} else if (/[A-Z]/.test(item)) {if (item == "Z") {_newarr.push("a");} else {_newarr.push(String.fromCharCode(item.charCodeAt(0) + 1).toLowerCase());}} else if (/[0-9]/.test(item)) {if (item == 9) {_newarr.push(0);} else {_newarr.push(Number(item) + 1);}}});let _linearr = twoarr[1].split("");// 解密let newarr = [];_linearr.forEach((item) => {if (/[a-z]/.test(item)) {if (item == "a") {newarr.push("Z");} else {newarr.push(String.fromCharCode(item.charCodeAt(0) - 1).toUpperCase());}} else if (/[A-Z]/.test(item)) {if (item == "A") {newarr.push("z");} else {newarr.push(String.fromCharCode(item.charCodeAt(0) - 1).toLowerCase());}} else if (/[0-9]/.test(item)) {if (item == 0) {newarr.push(9);} else {newarr.push(Number(item) - 1);}}});console.log(_newarr.join(""));console.log(newarr.join(""));
})();

知识笔记:
① 正则验证:test()方法,/[0-9]/验证是否是从1到9,/[a-z]/验证是否是从a-z;
② 大小写转化,toUpperCase()转大写,toLowerCase()转小写;
③ ASCII码转字符String.fromCharCode();
④ 字符转ASCII码string.charCodeAt();

题目五 HJ30 字符串合并处理

描述
按照指定规则对输入的字符串进行处理。

详细描述:

第一步:将输入的两个字符串str1和str2进行前后合并。如给定字符串 “dec” 和字符串 “fab” , 合并后生成的字符串为 “decfab”

第二步:对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”,分别对下标为偶数的字符’d’、‘c’、‘a’和下标为奇数的字符’e’、‘f’、'b’进行排序(生成 ‘a’、‘c’、‘d’ 和 ‘b’ 、‘e’ 、‘f’),再依次分别放回原串中的偶数位和奇数位,新字符串变为“abcedf”

第三步:对排序后的字符串中的’0’‘9’、‘A’‘F’和’a’~'f’字符,需要进行转换操作。
转换规则如下:
对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符(注:字符 a~f 的十六进制对应十进制的10~15,大写同理)。
如字符 ‘4’,其二进制为 0100 ,则翻转后为 0010 ,也就是 2 。转换后的字符为 ‘2’。
如字符 ‘7’,其二进制为 0111 ,则翻转后为 1110 ,对应的十进制是14,转换为十六进制的大写字母为 ‘E’。
如字符 ‘C’,代表的十进制是 12 ,其二进制为 1100 ,则翻转后为 0011,也就是3。转换后的字符是 ‘3’。
根据这个转换规则,由第二步生成的字符串 “abcedf” 转换后会生成字符串 “5D37BF”。

数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100

输入描述
样例输入两个字符串,用空格隔开。

输出描述:
输出转化后的结果。
在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herewhile ((line = await readline())) {let strarr = line.split(" ").join("").split("");let onearr = []; // 奇数数组;let twoarr = []; // 偶数数组;strarr.forEach((item, index) => {if (index % 2 == 0) {twoarr.push(item);} else {onearr.push(item);}});onearr = onearr.sort((a, b) => a.charCodeAt() - b.charCodeAt());twoarr = twoarr.sort((a, b) => a.charCodeAt() - b.charCodeAt());let _str = [];let len = onearr.length > twoarr.length ? onearr.length : twoarr.length;// 看谁length大,就用谁的长度来遍历for (let i = 0; i < len; i++) {// 遍历将两个数组合并到一起if (twoarr[i] != undefined) {_str.push(twoarr[i]);}if (onearr[i] != undefined) {_str.push(onearr[i]);}}let resultarr = [];_str.forEach((item) => {if (/[a-f]/i.test(item) || /[0-9]/.test(item)) {// 如果是a-f,0-9 则处理下let _item = parseInt(item, 16).toString(2);// 先转成2进制if (_item.length < 4) {for (let i = _item.length; i < 4; i++) {_item = "0" + _item.toString();// 补0}}_item = _item.split("").reverse().join("");// 反转_item = parseInt(_item, 2).toString(16);if (/[a-z]/.test(_item)) {_item = _item.toUpperCase();}resultarr.push(_item);}else{resultarr.push(item);}});console.log(resultarr.join(""));}
})();

知识笔记:
读题很重要。

题目六 HJ31 单词倒排

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void async function () {// Write your code herewhile(line = await readline()){let linearr = line.split('');let _arr = []linearr.forEach((item)=>{if(/[a-z]/i.test(item)){_arr.push(item)}else{_arr.push(" ")}})let _str = _arr.join('')_arr = _str.split(" ")_arr.forEach((item)=>{item = item.split('').reverse().join('')})console.log(_arr.reverse().join(' '))}
}()

题目七 HJ32 密码截取

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herewhile ((line = await readline())) {let value = "";value = line;let len = 0;// 写一个判断是否是回文字串的方法const func = (val) => {const i = 0,j = val.length - 1;if (val[i] === val[j]) {if (j - i <= 2) {return true;}const sub = val.substring(i + 1, j);if (func(sub)) {return true;}return false;} else {return false;}};// 遍历各种可能出现的组合,寻找最长回文字串for (let i = 0; i < value.length; i++) {for (let j = i + 1; j <= value.length; j++) {const sub = value.substring(i, j);if (func(sub)) {if (sub.length > len) {len = sub.length;}}}}console.log(len);}
})();

思考:
找最长的回文字符串。
比较重要的代码

// 写一个判断是否是回文字串的方法const func = (val) => {const i = 0,j = val.length - 1;if (val[i] === val[j]) {if (j - i <= 2) {return true;}const sub = val.substring(i + 1, j);if (func(sub)) {return true;}return false;} else {return false;}};

题目八 HJ33 整数与IP地址间的转换

描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

数据范围:保证输入的是合法的 IP 序列
在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void async function () {// Write your code herewhile(line = await readline()){let _arr = []if(line.indexOf('.')!=-1){// 判断输入的是IP地址还是数字// ip地址_arr = line.split('.');let _2arr = []_arr.forEach((item)=>{let _2str = eval(item).toString(2);if(_2str.length<8){for(let i = _2str.length;i<8;i++){_2str = "0" + _2str;// 补足8位2进制}}_2arr.push(_2str)})console.log(parseInt(_2arr.join(''), 2))}else{// 数字_arr = eval(line).toString(2)if(_arr.length < 32){for(let i = _arr.length;i<32;i++){_arr = "0" + _arr// 补足32位2进制}}let _2numarr = []for(let i = 0;i<4;i++){let _item = _arr.substring(i*8,(i+1)*8 )// 截取_2numarr.push(parseInt(_item, 2))}console.log(_2numarr.join('.'))}}
}()

题目九 HJ34 图片整理

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void async function () {// Write your code herewhile(line = await readline()){let arr = line.split('')let _arr = arr.sort()console.log(_arr.join(''))}
}()

就一个排序sort()

题目十 HJ38 求小球落地5次后所经历的路程和第5次反弹的高度

牛客网的题目难度参考下就行,不要较真。

在这里插入图片描述

JavaScript Node ACM 模式

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;void (async function () {// Write your code herewhile ((line = await readline())) {let _n = Number(line);let _all = 0;for (let i = 1; i <= 5; i++) {_all = _all + (Math.pow(2, -i) + Math.pow(2, -i + 1)) * _n;}_all  = _all - Math.pow(2, -5) * _nconsole.log(_all);console.log(Math.pow(2, -5) * _n);}
})();

思考:
这是数学的应用题,让你用代码的形式写出来,看来还是要多看数学呀。
大概落下过程是:
原始是n;
第一次落地,经历n;
第二次落地,经历1/2*n的弹起,加上1/4n的落下,即(1/2+1/4)n,2^(-1) * n + 2^(-2) * n ;
第三次落地,经历1/8
n的弹起,加上1/16n的落下,即(1/8+1/16)*n,2^(-3) * n + 2^(-4) * n;
……
第 i 次落地,经历2^(-i) * n + 2^(-i-1) * n;
总的长度就是n + 2^(-1) * n + 2^(-2) * n +2^(-3) * n + 2^(-4) * n + ……+2^(-i) * n + 2^(-i-1) * n;
搞个for循环遍历下;

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

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

相关文章

【机器学习】处理不平衡的数据集

一、介绍 假设您在一家给定的公司工作&#xff0c;并要求您创建一个模型&#xff0c;该模型根据您可以使用的各种测量来预测产品是否有缺陷。您决定使用自己喜欢的分类器&#xff0c;根据数据对其进行训练&#xff0c;瞧&#xff1a;您将获得96.2%的准确率&#xff01; …

Django模型基础

文章目录 一、models字段类型概述属性命名限制使用方式逻辑删除和物理删除常用字段类型 二、常用字段参数常用字段选项(通过字段选项&#xff0c;可以实现对字段的约束) 实践创建模型执行迁移命令 并 创建超级用户登录admin后台添加文件和图片字段定义模型字段和约束及在Admin后…

计算机竞赛 卷积神经网络手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

【0815作业】搭建select的TCP客户端、poll客户端、tftp文件上传

IO多路复用&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 进程中如果同时需要处理多路输入输出流&#xff0c;在使用单进程单线程的情况下&#xff0c;同时处理多个输入输出请求。在无法用多进程多线程&#xff0c;可以选择用IO多路复用&#xff1b;由于不…

DTC 19服务学习1

在UDS&#xff08;统一诊断服务&#xff09;协议中&#xff0c;0x19是用于DTC&#xff08;诊断故障代码&#xff09;信息的服务。以下是你提到的子服务的功能和作用&#xff1a; 0x01 - 报告DTC按状态掩码。这个子服务用于获取当前存储在ECU中的DTC列表。状态掩码用于过滤DTC&a…

通过爬虫抓取上市企业利润表并在睿思BI中展示

睿思BI从v5.3开始支持网络爬虫&#xff0c;可以从指定URL抓取表格数据&#xff0c;本示例实现从网络上抓取上市企业招商银行的利润表数据&#xff0c;并在睿思BI中进行展现。 功能演示URL&#xff1a;https://www.ruisitech.com/rsbi-ultimate/#/dashboard/ShareView?token31…

【C语言】动态通讯录 -- 详解

⚪前言 前面详细介绍了静态版通讯录【C语言】静态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客&#xff0c;但是静态版通讯录的空间是无法被改变的&#xff0c;而且空间利用率也不高。为了解决静态通讯录这一缺点&#xff0c;这时就要有一个能够随着存入联系人数量的增加而增大…

记录hutool http通过代理模式proxy访问外面的链接

效果&#xff1a; 代码&#xff1a; public class TestMain {public static void main(String[] args){HttpRequest httpRequest HttpRequest.get("https://www.youtube.com").timeout(30000);httpRequest.setProxy(new Proxy(Proxy.Type.HTTP,new InetSocketAddre…

简单理解Linux中的一切皆文件

一款操作系统要管理各种各样不同的硬件&#xff0c;因为硬件的不同所以它们使用的文件系统也不同。但是按道理来说&#xff0c;文件系统的不同对于用户来说可不是一件好事&#xff0c;操作不同的硬件就要使用不同的方法。 但是Linux有一切皆文件。 简单来说&#xff0c;Linux…

【数据分析入门】Matplotlib

目录 零、图形解析与工作流0.1 图形解析0.2 工作流 一、准备数据1.1 一维数据1.2 二维数据或图片 二、绘制图形2.1 画布2.2 坐标轴 三、绘图例程3.1 一维数据3.2 向量场3.3 数据分布3.4 二维数据或图片 四、自定义图形4.1 颜色、色条与色彩表4.2 标记4.3 线型4.4 文本与标注4.5…

(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】

❓剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 难度&#xff1a;简单 输入一个整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有奇数在数组的前半部分&#xff0c;所有偶数在数组的后半部分。 示例&#xff1a; 输入&#xff1a;nums [1…

python+django+mysql高校校园外卖点餐系统--计算机毕设项目

本文的研究目标是以高校校园外卖点餐为对象&#xff0c;使其高校校园外卖点餐为目标&#xff0c;使得高校校园外卖点餐的信息化体系发展水平提高。论文的研究内容包括对个人中心、美食分类管理、用户管理、商家管理、美食信息管理、工作人员管理、安全检查管理、系统管理、订单…

nginx(七十七)nginx与包体的探究

一 nginx与body体 说明&#xff1a;本文不具有生产意义,只是为了nginx知识的闭环,可以跳过即可 --> "数据脱敏"题外话&#xff1a; 对body的CURD,nginx和openresty处理方式不同强调&#xff1a; 本文是基于http演示的,如果是https加密我们是看不到的 ① core模…

postgresql的在windows下的安装

postgresql的在windows下的安装 下载安装步骤超级用户设置密码本地化设置安装信息安装完成 查看postgresql服务pgAdmin的使用打开命令 行工具查询数据库版本 创建数据库 下载 官网地址 https://www.postgresql.org/ 下载页面 https://www.postgresql.org/download/ windows下…

泛型编程 学习笔记

#include "iostream"using namespace std;template<typename T> void Print(T a) {cout << a << endl; }int main() {int a 5;double b 2.3;char c e;string d "sdfasd";Print(a);Print(b);Print(c);Print(d);return 0; } 它可以不用…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价

近年来&#xff0c;国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究&#xff0c;他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合&#xff0c;评价不同类型研究区的生态脆弱特征&#xff0c;其研究内容…

k8s服务注册发现

Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。 定义service前端为service名称、ip、端口等不变的部分&#xff0c;后端为符合标签选择的pod集合 注册 通过api server提交注册service请求到DNSservice随后得到clusterIP&#xff08;虚拟ip地址&am…

如何解决使用npm出现Cannot find module ‘XXX\node_modules\npm\bin\npm-cli.js’错误

遇到问题&#xff1a;用npm下载组件时出现Cannot find module ‘D&#xff1a;software\node_modules\npm\bin\npm-cli.js’ 问题&#xff0c;导致下载组件不能完成。 解决方法&#xff1a;下载缺少的npm文件即可解决放到指定node_modules目录下即可解决。 分析问题&#xff1…

机器学习知识点总结:什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成&#xff0c;但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树&#xff0c;树有分类有回归&#xff0c;区分它们的方法很简单。将苹果单纯分为好与坏的是分类树&#xff0c;如果能为苹果的好坏程度打个分&…

GPT系列总结

1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training &#xff08;1&#xff09;基于一个transformer decoder&#xff0c;通过一个窗口的输入得…