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

private前端常见算法

1.数组

合并两个有序数组(简单-5)

https://leetcode.cn/problems/merge-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150

移除元素(简单-4)

https://leetcode.cn/problems/remove-element/description/?envType=study-plan-v2&envId=top-interview-150

删除有序数组重复项(简单-5)

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150

删除有序数组重复项2(中等-3)

https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/description/?envType=study-plan-v2&envId=top-interview-150

买股票最佳时机(简单-4)

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/?envType=study-plan-v2&envId=top-interview-150

买股票最佳时机2(中等-3)

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/?envType=study-plan-v2&envId=top-interview-150

罗马数字转整数(中等-4)

https://leetcode.cn/problems/roman-to-integer/description/?envType=study-plan-v2&envId=top-interview-150

最后一个单词的长度(简单-5)

https://leetcode.cn/problems/length-of-last-word/description/?envType=study-plan-v2&envId=top-interview-150

最长公共前缀(简单-5)

https://leetcode.cn/problems/longest-common-prefix/description/?envType=study-plan-v2&envId=top-interview-150

找出字符串中第一个匹配项的下标

https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/?envType=study-plan-v2&envId=top-interview-150

2.双指针

验证回文串 (中等-5)

https://leetcode.cn/problems/valid-palindrome/description/?envType=study-plan-v2&envId=top-interview-150
在这里插入图片描述

//方法1
var isPalindrome = function(s) {let exp=[' ',',',':',]let str=''for (const e of s) {if(!exp.includes(e)){str+=e}}str=str.toLowerCase()let revers=str.split('').reverse().join('')console.log(str,revers);if(str===revers){return true}else{return false}
};
console.log(isPalindrome("A man, a plan, a canal: Panama"));/双指针
//方法2
var isPalindrome = function(s) {s = s.replace(/([^a-zA-Z0-9])/g, '');for (let i = 0, j = s.length - 1; i < j; i++,j--) {if (s[i].toLocaleLowerCase() !== s[j].toLocaleLowerCase()) {return false;}}return true;
}//方法3
var isPalindrome = function (s) {s = s.replace(/[\W|_]/g, "").toLowerCase();if (s.length < 2) {return true;}let left = 0;let right = s.length - 1;while (left < right) {if (s[left] !== s[right]) {//对撞指针判断左右两边是否是相同的字符return false;}left++;right--;}return true;
}

三数之和(中等-5)

https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-interview-150
在这里插入图片描述

var threeSum = function(nums) {if(!nums) return []let arr=[]let sort=nums.sort((a,b)=>a-b)for(var i=0;i<sort.length;i++){var L=i+1var R=sort.length-1while(L<R){var sum=sort[i]+sort[L]+sort[R]if(sum==0){//去重判断if(!arr.includes([sort[i],sort[L],sort[R]])){arr.push([sort[i],sort[L],sort[R]]) }L++R--}if(sum<0){L++}if(sum>0){R--}}}return arr
};console.log(threeSum([1,2,3,4,-2,-3,0]));

盛水最多的容器(中等-5)

https://leetcode.cn/problems/container-with-most-water/description/?envType=study-plan-v2&envId=top-interview-150

3.滑动窗口

长度最小的子数组(中等-4)

https://leetcode.cn/problems/minimum-size-subarray-sum/description/?envType=study-plan-v2&envId=top-interview-150

无重复字符的最长子串(中等-4)

https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-interview-150

4.矩阵

旋转图像 (中等-3)

https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-interview-150

5.哈希表

两数之和(简单-5)

https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-interview-150

最长连续序列(中等-5)

https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-interview-150

6. 栈

有效括号(简单-5)

https://leetcode.cn/problems/valid-parentheses/description/?envType=study-plan-v2&envId=top-interview-150

简化路径(中等-4)

https://leetcode.cn/problems/simplify-path/description/?envType=study-plan-v2&envId=top-interview-150

7. 链表

环形链表(简单-5)

https://leetcode.cn/problems/linked-list-cycle/description/?envType=study-plan-v2&envId=top-interview-150

旋转链表(中等-4)

https://leetcode.cn/problems/rotate-list/description/?envType=study-plan-v2&envId=top-interview-150

K 个一组翻转链表(中等-4)

https://leetcode.cn/problems/reverse-nodes-in-k-group/description/?envType=study-plan-v2&envId=top-interview-150

8.二叉树

二叉树最大深度(中等-3)

https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/?envType=study-plan-v2&envId=top-interview-150

翻转二叉树(中等-4)

https://leetcode.cn/problems/invert-binary-tree/description/?envType=study-plan-v2&envId=top-interview-150

二叉树层序遍历(中等-4)

https://leetcode.cn/problems/binary-tree-level-order-traversal/description/?envType=study-plan-v2&envId=top-interview-150

9.回溯

电话号码的字母组合(中等-3)

https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/?envType=study-plan-v2&envId=top-interview-150

10.二分查找

搜索插入位置(中等-3)

https://leetcode.cn/problems/search-insert-position/description/?envType=study-plan-v2&envId=top-interview-150

11.堆

数组中的第 K 个最大元素(中等-3)

https://leetcode.cn/problems/xx4gT2/description/

12.位运算

二进制求和(简单-4)

https://leetcode.cn/problems/add-binary/description/?envType=study-plan-v2&envId=top-interview-150

只出现一次的数字(简单-3)

https://leetcode.cn/problems/single-number/description/?envType=study-plan-v2&envId=top-interview-150

13. 数学

回文数(简单-5)

https://leetcode.cn/problems/palindrome-number/description/?envType=study-plan-v2&envId=top-interview-150

x的平方根(简单-3)

https://leetcode.cn/problems/sqrtx/description/?envType=study-plan-v2&envId=top-interview-150

14.动态规划

爬楼梯 (简单-5)

https://leetcode.cn/problems/climbing-stairs/description/?envType=study-plan-v2&envId=top-interview-150

零钱兑换 (中等-4)

https://leetcode.cn/problems/coin-change/description/?envType=study-plan-v2&envId=top-interview-150

最长回文串(中等-4)

https://leetcode.cn/problems/longest-palindromic-substring/description/?envType=study-plan-v2&envId=top-interview-150

15.其他

扁平化转树形结构

const data = [// 每项主要由id和name组成,而pid指向其父节点的id// 如果是树节点则对应的pid为空{ id: '01', name: '中国', pid: ''},{ id: '02', name: '北京市', pid: '01'},{ id: '03', name: '海淀区', pid: '02'},{ id: '04', name: '丰台区', pid: '02'},{ id: '05', name: '朝阳区', pid: '02'},{ id: '06', name: '重庆市', pid: '01'},{ id: '07', name: '渝中区', pid: '06'},{ id: '08', name: '江北区', pid: '06'},{ id: '09', name: '四川省', pid: '01'},{ id: '10', name: '成都市', pid: '09'},{ id: '11', name: '成华区', pid: '10'},{ id: '12', name: '武侯区', pid: '10'}
];function transNormalToTree(array) {let  result = [] //最终存储的结果// 对数组中的每个对象进行遍历array.forEach( item => {// 判断当前节点是否为根节点,如果是则pushif (!item.pid) {result.push(item)}// 将所有pid等于当前id的对象储存在children数组中let childArray = array.filter(data => data.pid === item.id)// 判断当前节点是否为叶节点,如果是则退出if (!childArray.length) {return  }// 将符合条件的子数组赋值给当前项的child属性item.child = childArray})return result
}console.log(transNormalToTree(data))

实现事件订阅机制

/** 
说明:简单实现一个事件订阅机制,具有监听on和触发emit方法
示例:
const event = new EventEmitter();
event.on('someEvent', (...args) => {
console.log('some_event triggered', ...args);
});
event.emit('someEvent', 'abc', '123');
// class EventEmitter { /* 功能实现 */

实现

class EventEmitter {constructor() {this.events = {}; // 存储事件及其对应的回调函数}// 监听事件on(eventName, callback) {if (!this.events[eventName]) {this.events[eventName] = []; // 如果事件不存在,创建一个空数组}this.events[eventName].push(callback); // 将回调函数添加到事件的回调数组中}// 触发事件emit(eventName, ...args) {if (this.events[eventName]) {this.events[eventName].forEach(callback => {callback(...args); // 调用每个回调函数,并传递参数});}}
}// 示例使用
const event = new EventEmitter();event.on('someEvent', (...args) => {console.log('some_event triggered', ...args);
});event.emit('someEvent', 'abc', '123');

实现一个休眠函数

/** :实现一个函数 使当前运行的异步操作(promise 或者 async)停止等待若干秒 */
const sleep = (ms) => {// 请补充
}(async () => { console.log('hello');// 等待两秒 await sleep(20000);console.log('world'); 
})()
const sleep = (ms: number) => {return new Promise(resolve => setTimeout(resolve, ms));
};(async () => {console.log('hello');await sleep(2000); // 等待两秒console.log('world');
})();

解析url

/** * 编辑试题描述 // 实现一个方法,拆解URL参数中queryString * // 入参格式参考: const url = 'http://sample.com/?a=1&b=2&c=xx&d#hash'; * const params = { a: '5', e: '6'};
// 出参格式参考: const result = { a: '5', b: '2', c: 'xx', d: '', e: '6' };
// 拆解URL参数中queryString,返回一个 key - value 形式的 object function querySearch(url, params) { // 在这里写代码}*/
function querySearch(url: string, params: { [key: string]: string }) {const result: { [key: string]: string } = { ...params };const queryString = url.split('?')[1]?.split('#')[0] || '';const queryParams = new URLSearchParams(queryString);queryParams.forEach((value, key) => {result[key] = value;});return result;
}// 示例
const url = 'http://sample.com/?a=1&b=2&c=xx&d#hash';
const params = { a: '5', e: '6' };
const result = querySearch(url, params);
console.log(result); // { a: '5', b: '2', c: 'xx', d: '', e: '6' }

金额处理

/**
实现金额千位分隔符,用法如下
parseToMoney(1234.56); // return '1,234.56'
parseToMoney(123456789); // return '123,456,789'
parseToMoney(1087654.321); // return '1,087,654.321'
*/
//正则
function parseToMoney(num: number): string {const [integerPart, decimalPart] = num.toString().split('.');const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;
}//不用正则
function parseToMoney(num: number): string {const [integerPart, decimalPart] = num.toString().split('.');const reverseInteger = integerPart.split('').reverse().join('');let formattedInteger = '';for (let i = 0; i < reverseInteger.length; i++) {if (i > 0 && i % 3 === 0) {formattedInteger += ',';}formattedInteger += reverseInteger[i];}formattedInteger = formattedInteger.split('').reverse().join('');return decimalPart ? `${formattedInteger}.${decimalPart}` : formattedInteger;
}// 示例
console.log(parseToMoney(1234.56)); // '1,234.56'
console.log(parseToMoney(123456789)); // '123,456,789'
console.log(parseToMoney(1087654.321)); // '1,087,654.321'

扁平化数组

/** 数组扁平化处理,并排序var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; // newArr = [1, 2, 3, 4, 5, 6, 7 ,8, 9, 10, 11, 12, 13, 14];const newArr = myFlatten(arr) console.log(newArr)*/
function myFlatten (req) { // 请补充
}
function myFlatten(arr: any[]): number[] {return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? myFlatten(val) : val), []).sort((a, b) => a - b);
}// 示例
const arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
const newArr = myFlatten(arr);
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

相关文章:

private前端常见算法

1.数组 合并两个有序数组&#xff08;简单-5&#xff09; https://leetcode.cn/problems/merge-sorted-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 移除元素&#xff08;简单-4&#xff09; https://leetcode.cn/problems/remove-element/descr…...

Go语言之十条命令(The Ten Commands of Go Language)

Go语言之十条命令 Go语言简介 Go语言&#xff08;又称Golang&#xff09;‌是由Google开发的一种开源编程语言&#xff0c;首次公开发布于2009年。Go语言旨在提供简洁、高效、可靠的软件开发解决方案&#xff0c;特别强调并发编程和系统编程‌。 Go语言的基本特征 ‌静态强类…...

Residency 与 Internship 的区别及用法解析

Residency 与 Internship 的区别及用法解析 在英文中&#xff0c;“residency” 和 “internship” 都与职业培训相关&#xff0c;但它们的使用场景和具体含义存在显著差异。本文将详细解析这两个词的区别&#xff0c;以及它们在不同语境下的应用。 Residency 的定义及使用场景…...

成品电池综合测试仪:电子设备性能与安全的守护者|鑫达能

在现代科技和工业领域&#xff0c;电池作为能量储存和转换的关键组件&#xff0c;其性能的稳定性和可靠性至关重要。为了确保电池在各种应用场景中都能发挥最佳性能&#xff0c;成品电池综合测试仪应运而生。这一设备不仅能够对电池的各项性能指标进行全面、准确的检测&#xf…...

Taro地图组件和小程序定位

在 Taro 中使用腾讯地图 1.首先在项目配置文件 project.config.json 中添加权限&#xff1a; {"permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}} }2.在 app.config.ts 中配置&#x…...

深入了解 SSL/TLS 协议及其工作原理

深入了解 SSL/TLS 协议及其工作原理 一. 什么是 SSL/TLS?二. SSL/TLS 握手过程三. SSL/TLS 数据加密与传输四. 总结 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都在歌唱 一. 什么是 SSL/TLS? 安全套接层&am…...

【计算机操作系统:二、操作系统的结构和硬件支持】

第2章 操作系统的结构和硬件支持 2.1 操作系统虚拟机 操作系统虚拟机是一种通过软件技术对硬件资源进行抽象和虚拟化的机制&#xff0c;使用户能够以逻辑方式访问和使用计算机资源。 定义与概念&#xff1a; 虚拟机是操作系统虚拟化技术的核心产物&#xff0c;通过模拟硬件资…...

51单片机——步进电机模块

直流电机没有正负之分&#xff0c;在两端加上直流电就能工作 P1.0-P1.3都可以控制电机&#xff0c;例如&#xff1a;使用P1.0&#xff0c;则需要把线接在J47的1&#xff08;VCC&#xff09;和2&#xff08;OUT1&#xff09;上 1、直流电机实验 要实现的功能是&#xff1a;直…...

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章&#xff08;置顶&#xff09; 1.当算法遇到线性代数&#xff08;一&#xff09;&#xff1a;二次型和矩阵正定的意义 2.当算法遇到线性代数&#xff08;二&#xff09;&#xff1a;矩阵特征值的意义 3.当算法遇到线性代数&#xff0…...

SASS 简化代码开发的基本方法

概要 本文以一个按钮开发的实例&#xff0c;介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式&#xff0c;从样式来看&#xff0c;每个按钮的基本样式相同&#xff0c;就是颜色不同。 如果按照传统的方式开发&#xff0c;需要开发btn &…...

40.TryParse尝试转化为int类型 C#例子

也许这个时候学有点晚&#xff0c;但是不管怎样都学了 尝试转化&#xff0c;不能转化就返回bool类型的假 它会直接给括号里面的int类型赋值 代码&#xff1a; using System; using System.Timers; public class Program {static void Main(){int a;bool i;while (true){Get…...

【微服务】2、网关

Spring Cloud微服务网关技术介绍 单体项目拆分微服务后的问题 服务地址问题&#xff1a;单体项目端口固定&#xff08;如黑马商城为8080&#xff09;&#xff0c;拆分微服务后端口各异&#xff08;如购物车808、商品8081、支付8086等&#xff09;且可能变化&#xff0c;前端难…...

红队-shell编程篇(上)

声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、建立Shell文件 1. Shell简介 Shell是一种命令行界面&am…...

电子价签会是零售界的下一个主流?【新立电子】

电子价签&#xff0c;作为一种能够替代传统纸质标签的数字显示屏&#xff0c;已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点&#xff0c;实现价格的实时更新&#xff0c;大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...

5 分布式ID

这里讲一个比较常用的分布式防重复的ID生成策略&#xff0c;雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库&#xff0c;分机房部署&#xff0c;单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...

SpringBoot | @Autowired 和 @Resource 的区别及原理分析

关注&#xff1a;CodingTechWork 引言 在Spring框架中&#xff0c;Autowired 和 Resource 是两种常用的依赖注入注解&#xff0c;它们都用于自动装配Bean&#xff0c;简化了开发者手动创建和管理Bean的繁琐工作。然而&#xff0c;它们的实现机制和使用方式有所不同。理解这两者…...

『SQLite』解释执行(Explain)

摘要&#xff1a;本节主要讲解SQL的解释执行&#xff1a;Explain。 在 sqlite 语句之前&#xff0c;可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语&#xff0c;用于描述表查询的细节。 基本语法 EXPLAIN 语法&#xff1a; EXPLAIN [SQLite Query]EXPLAIN QUER…...

0基础学前端-----CSS DAY12

视频参考&#xff1a;B站Pink老师 今天是CSS学习的第十二天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点&#xff1a;CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例&#xff1a;拼出自己的名字 2. 字体图标2.…...

(概率论)无偏估计

参考文章&#xff1a;(15 封私信 / 51 条消息) 什么是无偏估计&#xff1f; - 知乎 (zhihu.com) 首先&#xff0c;第一个回答中&#xff0c;马同学图解数学讲解得很形象&#xff0c; 我的概括是&#xff1a;“注意&#xff0c;有一个总体的均值u。然后&#xff0c;如果抽样n个&…...

Minio-Linux-安装

文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动&#xff01;1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...