首页 > 编程语言 >前端常见算法题

前端常见算法题

时间:2024-09-11 16:20:08浏览次数:3  
标签:字符 charMap 前端 常见 char 次数 算法 字符串 复杂度

1、去除字符串中出现次数最少的字符,不改变原字符串的顺序

实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

“ababac” —— “ababa”
“aaabbbcceeff” —— “aaabbb”

可以通过以下步骤使用 JavaScript 去除字符串中出现次数最少的字符,同时不改变原字符串的顺序:

  1. 定义一个对象来存储每个字符出现的次数。
  2. 遍历字符串,将每个字符出现的次数保存到对象中。
  3. 找出出现次数最少的字符,并将其从对象中删除。
  4. 遍历字符串并根据存储的次数对象过滤出符合条件的字符。
  5. 将符合条件的字符拼接成新的字符串并返回。

下面是代码示例:

functionremoveLeastFrequentChar(str){
// 定义存储每个字符出现次数的对象
const charMap ={};

// 遍历字符串并将每个字符出现的次数保存到对象中
for(let i =0; i < str.length; i++){
  const char = str[i];
    if(!charMap[char]){
    charMap[char]=1;
  }else{
  	charMap[char]++;
  }
}

// 找出出现次数最少的字符,并将其从对象中删除
const minCount = Math.min(...Object.values(charMap));
for(const key in charMap){
  if(charMap.hasOwnProperty(key)){
    if(charMap[key]=== minCount){
  	  delete charMap[key];
    }
  }
}

// 遍历字符串并根据存储的次数对象过滤出符合条件的字符
const filteredChars =[];
for(let i =0; i < str.length; i++){
  const char = str[i];
  if(charMap[char]){
  	filteredChars.push(char);
  }
}
  // 将符合条件的字符拼接成新的字符串并返回
  return filteredChars.join("");
}
2、什么是时间复杂度?

时间复杂度的计算并不是计算程序具体运行的时间,而是算法执行语句的次数。

随着n的不断增大,时间复杂度不断增大,算法花费时间越多。

常见的时间复杂度:

  • 常数阶O(1)
  • 对数阶O(log2 n)
  • 线性阶O(n)
  • 线性对数阶O(n log2 n)
  • 平方阶O(n^2)
  • 立方阶O(n^3)
  • k次方阶O(n^K)
  • 指数阶O(2^n)

计算方法:

  • 选取相对增长最高的项
  • 最高项系数是都化为1
  • 若是常数的话用O(1)表示

举个例子:如f(n)=3*n^4+3n+300 则 O(n)=n^4

通常我们计算时间复杂度都是计算最坏情况。计算时间复杂度的要注意的几个点:

  • 如果算法的执行时间不随n的增加而增长,假如算法中有上千条语句,执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

举例如下:代码执行100次,是一个常数,复杂度也是O(1)。

let x =1;
while(x <100){
x++;
}
  • 有多个循环语句时候,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的方法决定的。

举例如下:在下面for循环当中,外层循环每执行一次,内层循环要执行n次,执行次数是根据n所决定的,时间复杂度是O(n^2)。

for(i =0; i < n; i++){
  for(j =0; j < n; j++){
  // ...code
  }
}
  • 循环不仅与n有关,还与执行循环判断条件有关。

举例如下:在代码中,如果arr[i]不等于1的话,时间复杂度是O(n)。如果arr[i]等于1的话,循环不执行,时间复杂度是O(0)。

for(var i =0; i<n && arr[i]!=1; i++){
// ...code
}

3、实现一个

标签:字符,charMap,前端,常见,char,次数,算法,字符串,复杂度
From: https://blog.csdn.net/2403_86761661/article/details/142107119

相关文章

  • 前端面试(上)
    一:HTML篇1.HTML5新特性拖拽释放(Drapanddrop)API;语义化标签(headernavfooterarticle等);视频、音频(audio、video)API;画布(Canvas);地理(Geolocation)定位;存储(localStorage,sessionStorage);表单控件(date、time、email、url、search等);新的技术(多任务webworker、全双工通......
  • Web前端与物联网虚拟仿真系统对接读取与控制
    面对学生学习前端开发困难,教师难管理的问题,我们开发了一套Web前端开发实训平台。方便教师与学生进行网站的发布与浏览,平台具备在线CODE编辑器,直接输入代码完成前端开发代码的编写,系统自动生成预览的效果界面。该实训平台能与我们的物联网仿真系统联动,实现虚实结合。物联网......
  • 【大模型理论篇】ToB的大模型系统非常有必要引入搜索推荐算法能力(回顾BPR、W&D、ALS等
    1.背景和思考              上周2024上海外滩大会如约而至,各种大咖云集,多种观点思想碰撞,带来很多新的启发。我个人比较关注大模型和隐私计算相关的内容,因此重点听了相关老师带来的行业前沿进展和深度思考。有两位老师的观点,特别认同,一位是百川智能的王小川......
  • 测试工具Fiddler(三)—— 常见功能介绍
    Fiddler的功能面板1、statistics:请求的性能指标;全世界范围的性能测试;RTP:一个请求的从发送出去到返回的时间;Showchart可以看出图表的示例;2、inspectors:对请求解包:header:请求头信息。UA,cookie,发送请求来源。textView:可以看到返回的数据;imageview:可以看到返回......
  • 代码随想录算法训练营Day1
    目录704.二分查找 27.移除元素977.有序数组的平方 704.二分查找 分类:左闭右闭、左闭右开Tips:1.循环条件:左闭右闭:左索引<=右索引左闭右开:左索引<右索引2.循环操作:处理元素>目标值:左闭右闭:右索引=折半索引-1左闭右开:右索引=折半索引classSolution{......
  • 互联网算法备案必要性+攻略全流程详解【附件+流程】
    一、算法备案的重要性算法备案是指相关企业或组织向有关部门提交其使用的算法的相关信息,以接受监管和审查。这一举措有助于确保算法的公正性、透明性和合法性,保护用户的权益,促进数字经济的健康发展。算法备案必要性强制性例如,在推荐系统中,如果算法存在偏见或歧视,可能会导致......
  • Salesforce常见的100+个业内术语!(系列四)
    不知不觉Salesforce行业术语系列已经进行到系列四啦!本篇文章继续为大家带来Service领域和Marketing领域的术语,希望能对各位学习者有所帮助。Service领域的术语CTI全称:ComputerTelephonyIntegrationTelephony可以直接集成到Salesforce。对于依赖电话服务的部门来说,这是一个......
  • 前端权限开发——设计到实践(保姆级)
    主要思想:基于角色的访问控制(Role-BasedAccessControl,RBAC)可以結合roleX框架学习RoleX是一种基于角色的访问控制(RBAC)框架,它提供了一种灵活、可扩展的方式来管理用户对系统资源的访问权限。RoleX的架构和原理如下:1.角色模型:RoleX的核心是一个角色模型,它定义了角色、权......
  • 算法与数据结构——图的基础操作及图的遍历(广度优先与深度优先)
    图的实现基于邻接矩阵的实现给定一个顶点数量为n的无向图:初始化:传入n个顶点,初始化长度为n的顶点列表vertices,使用O(n)时间;初始化n*n大小的邻接矩阵adjMat,使用O(n2)时间。添加或删除边:直接在邻接矩阵中修改指定的边即可,使用O(1)时间。而由于是无向图,因此需要同时更新两个......
  • 【大数据】分布式存储压缩算法
    目录一、分布式存储压缩算法概述二、分布式存储压缩算法优缺点和改进2.1 分布式存储压缩算法优点2.2分布式存储压缩算法缺点2.3 分布式存储压缩算法改进三、分布式存储压缩算法实现3.1 分布式存储压缩算法C语言实现3.2 分布式存储压缩算法JAVA实现3.3 分布式存......