面试-简单算法题

简单算法:

1.反转字符串

编写一个函数,将输入的字符串反转。

function reverseString(str) {return str.split('').reverse().join('');
}

str.split(‘’):使用 split(‘’) 方法将字符串 str 拆分成字符数组,每个字符都成为数组中的一个元素。例如,对于输入字符串 “hello”,拆分后的数组为 [‘h’, ‘e’, ‘l’, ‘l’, ‘o’]。

.reverse():使用 reverse() 方法将数组中的元素顺序颠倒。对于上一步得到的数组 [‘h’, ‘e’, ‘l’, ‘l’, ‘o’],通过 reverse() 方法得到的数组为 [‘o’, ‘l’, ‘l’, ‘e’, ‘h’]。

.join(‘’):使用 join(‘’) 方法将数组中的元素拼接成一个字符串。对于上一步得到的数组 [‘o’, ‘l’, ‘l’, ‘e’, ‘h’],通过 join(‘’) 方法得到的字符串为 “olleh”。

返回反转后的字符串。

2.查找数组内的最大值和最小值

编写一个函数,接受一个数字数组作为参数,返回数组中的最大值和最小值。
function findMinMax(arr) {
const min = Math.min(…arr);
const max = Math.max(…arr);
return { min, max };
}

3.数组去重

1) 使用Set数据结构

将数组转化为Set,由于Set的特性是不允许出现重复元素,因此会自动去除数组中的重复元素。然后再将Set转回为数组。

let arr = [1, 2, 3, 3, 4, 5, 5];
let uniqueArr = [...new Set(arr)];
2) 使用filter方法

利用filter方法和indexOf方法来过滤出不重复的元素。

let arr = [1, 2, 3, 3, 4, 5, 5];
let uniqueArr = arr.filter((value, index, self) => self.indexOf(value) === index);

解析:
声明了一个数组 arr,其中包含重复元素的数组:[1, 2, 3, 3, 4, 5, 5]。

使用filter方法对数组 arr 进行操作。filter方法接受一个回调函数作为参数,该回调函数会对数组中的每个元素进行处理。

回调函数接受三个参数:

value: 当前数组元素的值。
index: 当前数组元素的索引。
self: 原始数组本身。

在回调函数中,使用 self.indexOf(value) 来判断当前元素 value 在数组中第一次出现的位置。如果当前元素的索引和 self.indexOf(value) 返回的索引相等,说明当前元素是第一次出现,即不重复,则返回 true,保留在结果数组中,否则返回 false,在数组中被过滤掉。

最终得到的 uniqueArr 就是去除了重复元素的数组,即 [1, 2, 3, 4, 5]。

3) 使用reduce方法

通过reduce方法遍历数组,将不重复的元素加入结果数组中。

let arr = [1, 2, 3, 3, 4, 5, 5];
let uniqueArr = arr.reduce((acc, currentValue) => {if (!acc.includes(currentValue)) {acc.push(currentValue);}return acc;
}, []);

解析:
声明了一个数组 arr,其中包含重复元素的数组:[1, 2, 3, 3, 4, 5, 5]。

使用reduce方法对数组 arr 进行操作。reduce方法接受一个回调函数和一个初始值作为参数,该回调函数会对数组中的每个元素进行处理,并返回一个累加结果。

回调函数接受两个参数:

acc: 累加器,累积处理的结果。
currentValue: 当前数组元素的值。

在回调函数中,首先判断当前元素 currentValue 是否已经存在于累加器 acc 中,即判断 !acc.includes(currentValue)。如果当前元素不在累加器中,则将其添加到累加器中,通过 acc.push(currentValue) 实现。

最终返回累加器 acc,即去除了重复元素的数组。

初始值为一个空数组 [],这样reduce方法会从空数组开始逐个处理数组元素,将不重复的元素逐步累加到结果数组中。

最终得到的 uniqueArr 就是去除了重复元素的数组,即 [1, 2, 3, 4, 5]。

4)使用对象属性

利用对象的属性来存储元素,如果对象中不存在该属性,则将其存入结果数组中。

let arr = [1, 2, 3, 3, 4, 5, 5];
let uniqueArr = [];
let obj = {};
for (let i of arr) {if (!obj[i]) {uniqueArr.push(i);obj[i] = 1;}
}

这段代码使用了一个空对象 obj 来去重,并利用一个额外的数组 uniqueArr来保存去重后的结果。让我们来解析一下这段代码的执行过程:
obj[i] 的理解
obj[i] 是使用变量 i 的值作为对象 obj 的属性名来进行访问的语法。

具体解释如下:

obj 是一个空对象,用于存储数组中出现过的元素。
在 for…of 循环中,let i of arr 会将数组 arr 中的每一个元素依次赋值给变量 i。
在循环体中,使用 obj[i] 就是尝试获取对象 obj 中属性名为 i 的属性的值。
如果 obj 中不存在属性名为 i 的属性,obj[i] 的值将是 undefined。
利用这一点,在条件判断中使用 if (!obj[i]) 可以判断当前元素 i 是否已经存在于对象 obj 中,如果不存在,则执行相应的操作。
在这段代码中,通过检查 obj[i] 是否为真来判断当前元素 i 是否已经存在于 obj 对象中。如果不存在,就将当前元素添加到 uniqueArr 数组中,并且在 obj 对象中为该元素设置一个属性,表示该元素已经出现过。

4.斐波那契数列

编写一个函数,接受一个数字n作为参数,返回斐波那契数列中第n个数字的值。
斐波那契数列是一个以 0 和 1 开始,后续的每一项都是前两项之和的数列。

function fibonacci(n) {if (n <= 1) {return n;}return fibonacci(n - 1) + fibonacci(n - 2);
}

这段代码是一个经典的递归实现斐波那契数列的函数。

具体解析如下:

函数名为 fibonacci,接收一个参数 n,表示要计算的斐波那契数列的第 n 个数字。
首先,函数检查输入的 n 值是否小于等于 1。若是,则直接返回 n。
如果 n 大于 1,函数会通过递归调用自身来计算第 n 个斐波那契数。
递归的终止条件是当 n 小于等于 1 时,直接返回 n。
在递归调用中,函数会依次计算第 n-1 和第 n-2 个斐波那契数,并将它们相加作为结果返回。
递归调用会一直向下延伸,直到达到终止条件,然后逐层返回结果,最终得到第 n 个斐波那契数的值。

5.回文字符串(正读和反读都一样)

编写一个函数,判断输入的字符串是否是回文字符串。

function isPalindrome(str) {const reversedStr = str.split('').reverse().join('');return str === reversedStr;
}

6.两个字符串是否是异位词

编写一个函数,判断两个字符串是否包含相同的字符,但字符的顺序可以不同。
异位词(anagram)指的是具有相同字母,但字母顺序不同的单词或短语。换句话说,如果两个字符串中的字符种类和数量相同,但是它们的排列顺序不同,那么这两个字符串就是异位词。
举例来说,“listen” 和 “silent” 就是异位词,因为它们都由相同的字母组成,只是顺序不同。

function isAnagram(str1, str2) {const sortedStr1 = str1.split('').sort().join('');const sortedStr2 = str2.split('').sort().join('');return sortedStr1 === sortedStr2;
}

解析:
具体解析如下:

函数名为 isAnagram,接收两个参数 str1 和 str2,分别表示要比较的两个字符串。
首先,函数将 str1 和 str2 分别转换为字符数组,然后对字符数组进行排序。
排序后,再将排序后的字符数组通过 join(‘’) 方法转换回字符串,得到 sortedStr1 和 sortedStr2,分别表示排序后的两个字符串。
最后,函数返回比较 sortedStr1 和 sortedStr2 是否相等的结果。如果它们相等,则说明原始的两个字符串是异位词,返回 true;否则返回 false。

7.数组求和

编写一个函数,接受一个数字数组作为参数,返回数组中所有数字的和。

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 输出 15

解析:
具体解析如下:

arr 是一个包含整数的数组 [1, 2, 3, 4, 5]。
reduce() 方法被调用在 arr 数组上,传入了两个参数:
第一个参数是一个回调函数 (accumulator, currentValue) => accumulator + currentValue,用于对数组中的每个元素进行操作。
accumulator 是一个累加器,初始值为 0,在每次迭代中保存着累积的结果。
currentValue 是当前被处理的元素,从数组的第一个元素开始。
回调函数的逻辑是将当前元素的值与累加器的值相加,并返回新的累加器值。
第二个参数是 0,表示累加器的初始值。
reduce() 方法的执行过程如下:
初始时,累加器的值为 0。
对于数组中的每个元素,回调函数将当前元素的值与累加器的值相加,得到一个新的累加器值。
最终,reduce() 方法返回最后一次回调函数的返回值作为最终的累加器值。
在这段代码中,sum 变量存储了 reduce() 方法的返回值,即数组 arr 中所有元素的总和。
最后,通过 console.log(sum) 打印 sum 的值,输出结果为 15,表示数组中所有元素的总和为 15。

8.数组平均值

编写一个函数,接受一个数字数组作为参数,返回数组中所有数字的平均值。

unction calculateAverage(arr) {if (arr.length === 0) {return 0; // 避免除以0错误,空数组的平均值为0}const sum = arr.reduce((acc, current) => acc + current, 0);const average = sum / arr.length;return average;
}// 示例数组
const numbers = [10, 20, 30, 40, 50];
const average = calculateAverage(numbers);
console.log("数组的平均值为:" + average);

9.查找最长单词

编写一个函数,接受一个字符串作为参数,返回字符串中最长的单词。

function findLongestWord(str) {const words = str.split(' ');let longestWord = '';for (let word of words) {if (word.length > longestWord.length) {longestWord = word;}}return longestWord;
}console.log('111', findLongestWord('I love coding and programming'))  // programming

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

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

相关文章

电路方案分析(十八)四开关buck-boost双向同步DC/DC变换器方案

tip是&#xff1a;资料来自网络&#xff0c;仅供学习交流使用&#xff01; 1.概述 4开关降压升压双向DC-DC电源转换器在很多应用中都有使用。作为一个同步降压或同步升压转换器&#xff0c;其中只有两个开关切换&#xff0c;开关损耗减少到一半。只有当直流母线和电池电压彼此…

人形机器人进展:IEEE Robotics出版双臂通用协同机械手操作架构

文章目录 1. Main2. My ThoughtsReference彩蛋a. OpenAI 投资: 人形机器人公司 Figure AIb. 人工智能软件工程师 Devin 上线 1. Main 图1 人居环境下的人形双臂机器人系统 通用人形机器人 作为近年来机器人与AI交叉领域的研究热点和技术竞争高地&#xff0c;因其具备在 非结构化…

深度强化学习(六)(改进价值学习)

深度强化学习(六)(改进价值学习) 一.经验回放 把智能体与环境交互的记录(即经验)储存到 一个数组里&#xff0c;事后反复利用这些经验训练智能体。这个数组被称为经验回放数组&#xff08;replay buffer&#xff09;。 具体来说, 把智能体的轨迹划分成 ( s t , a t , r t ,…

软件工程(Software Engineering)

一、软件工程概述 1.软件生存周期 软件&#xff1a; 包含程序、数据及相关文档 软件工程&#xff1a; 涉及到软件开发、维护、管理等多方面的原理、工具与环境。最终的目的是开发高质量的软件。 目的&#xff1a; 提高软件生产率、提高软件质量、降低软件成本。 文档的作用&…

一瓶5.86万,听花酒什么来头?

听花酒&#xff0c;到底什么来头&#xff1f; 宣称有提升免疫力、改善睡眠、保障男性功能、调节生理紊乱、抗衰老等功效的听花酒&#xff0c;被315晚会曝光了。 相关话题词随即冲上了热搜。之后&#xff0c;售价最高达58600元的听花酒被京东、拼多多、淘宝等电商平台火速下架…

01、CMD与Hello world

一、CMD与Hello World 文章目录 一、CMD与Hello World1.什么是cmd2.打开cmd3.常用命令4.环境变量5.JDK的安装6.JDK环境变量的配置7.javac 与 java命令8.HelloWorld9.JRE与JDKJDK&#xff08;Java Development kit&#xff09;:Java 开发工具包JRE &#xff08;Java Runtime Env…

HashMap的七种遍历方式

HashMap我整理了七种遍历方式&#xff1a; Iterator entrySet Iterator keySet ForEach entrySet ForEach keySet lambda stream entrySet stream 多线程 entrySet 下面看代码&#xff1a; public static void main(String[] args) {HashMap<String, String> map…

Stable Diffusion 阿里云搭建FC实现文生图模型

AI的创造力真的很奇妙。 提示词&#xff1a;杰作&#xff0c;最佳品质&#xff0c;非常详细&#xff0c;七龙珠&#xff0c;孙悟空&#xff0c;西游记&#xff0c;仙境&#xff0c;动态角度&#xff0c;火焰山&#xff0c;小岛&#xff0c;站立&#xff0c;携带魔兽&#xff0…

主干网络篇 | YOLOv8更换主干网络之ShuffleNetV2(包括完整代码+添加步骤+网络结构图)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。ShuffleNetV2是一种轻量级的神经网络架构&#xff0c;用于图像分类和目标检测任务。它是ShuffleNet的改进版本&#xff0c;旨在提高模型的性能和效率。ShuffleNetV2相比于之前的版本&#xff0c;在保持模型轻量化的同时&am…

预备知识:深入理解接口测试!

实验简介 随着移动互联网甚至物联网的触角深入到人们生活的每个场景&#xff0c;每个角落&#xff0c;伴随而来的便是企业对其软件系统接口定义和研发&#xff0c;以便于进行数据传输和交换。由此导致目前企业急需大量专职接口测试工程师&#xff0c;因为接口测试天然具备自动…

c++算法学习笔记 (8) 树与图部分

1.树与图的存储 &#xff08;1&#xff09;邻接矩阵 &#xff08;2&#xff09;邻接表 // 链式前向星模板&#xff08;数组模拟&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 100010, M …

安全性测试报告

我们出具报告&#xff0c;报告上是要体现安全性测评依据标准文件的。 这次出具的报告是按照GB 25000.51-2016标准&#xff0c;根据Q/GDW 1597-2015的测评项进行开展测评&#xff0c;根据10942-2018的具体测评方法进行编写报告 在标准文件中&#xff0c;有“安全漏洞” &#x…

【RS422】基于未来科技FT4232HL芯片的多波特率串口通信收发实现

功能简介 串行通信接口常常用于在计算机和低速外部设备之间传输数据。串口通信存在多种标准&#xff0c;以RS422为例&#xff0c;它将数据分成多个位&#xff0c;采用异步通信方式进行传输。   本文基于Xilinx VCU128 FPGA开发板&#xff0c;对RS422串口通信进行学习。   根…

家具工厂5G智能制造数字孪生可视化平台,推进家具行业数字化转型

家具制造5G智能制造工厂数字孪生可视化平台&#xff0c;推进家具行业数字化转型。随着科技的飞速发展&#xff0c;家具制造业正迎来一场前所未有的数字化转型。在这场家具制造业转型中&#xff0c;5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。 5G智能制造工厂数字孪…

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

MATLAB中的数据类型

MATLAB是一种高级编程语言和交互式环境&#xff0c;用于算法开发、数据可视化、数据分析和数值计算。在MATLAB中&#xff0c;数据类型是用于分类和定义存储在变量中数据种类的基本概念。选择适当的数据类型对于确保程序的正确性、有效性和内存效率至关重要。下面将详细解释MATL…

python企业编码管理的程序(附源码)

企业编码管理Python程序包介绍 在当今数字化时代&#xff0c;企业编码管理成为企业信息化建设中不可或缺的一环。有效的编码管理不仅有助于企业规范业务流程&#xff0c;提高数据处理效率&#xff0c;还能降低运营成本&#xff0c;增强市场竞争力。为此&#xff0c;我们推出了…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

降维算法之t-SNE (t-Distributed Stochastic Neighbor Embedding)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; t-SNE是一种用于探索高维数据结构的非线性降维技术。它特别适用于高维数据的可视化&#xff0c;因为它能够在低维空间中保留原始高维数据的局部结…

[WUSTCTF2020]朴实无华

查看robots.txt 找到/fAke_flagggg.php 显然这是个假的flag&#xff0c;但是我们在header处发现了fl4g.php 近来发现中文全部变成了乱码 插件转成utf8后正常显示 <?php header(Content-type:text/html;charsetutf-8); error_reporting(0); highlight_file(__file__);//leve…