前端程序员大厂面试精选100道算法题2
碎碎念:
亲爱的读者:你好!我的名字叫昌龙 【Changlon】 —— 一个非科班程序员、一个致力于前端的开发者、一个热爱生活且又时有忧郁的思考者。
如果我的文章能给你带来一些收获,你的点赞收藏将是对我莫大的鼓励!
我的邮箱:thinker_changlon@163.com
我的Github: https://github.com/Changlon
无论从事前端后端,不得不说算法才是决定一个程序员水平高低,工资收入的基石。算法能力也是一个程序员未来能走多远的一个决定性因素。小龙这里为大家总结了最新大厂面试题锦,为你的面试推波助力。
程序员之进大厂必刷算法题系列
数组
字符串
链表
栈
哈希
二叉树
二分算法
分治算法(快排序)
动态规划
深度优先,广度优先算法
递归,回溯算法
贪心算法
文章目录
- 一、NC141 判断回文
- 二、NC31 第一个只出现一次的字符
- 三、NC55 最长公共前缀
- 四、NC103 反转字符串
- 五、NC113 验证IP地址
- 六、NC17 最长回文子串
- 七、NC1 大数加法
- 八、NC100 将字符串转化为整数
- 九、NC149 kmp算法
- 十、NC28 最小覆盖子串
- 十 一、NC142 最长重复子串
一、NC141 判断回文
描述
给定一个字符串,请编写一个函数判断该字符串是否回文。如果回文请返回true,否则返回false。
示例1
输入: “absba”
返回值: true
示例2
输入: “ranko”
返回值: false
思路: 判断是否是回文字符串,就是从字符串的左边遍历和从右边遍历的效果是一样的。可以用双指针分别从前向后,和从右向前遍历,加入遇到不一样的字符就说明不是一个回文字符串。
function judge( str ) {let left = 0,right = str.length-1 while(left<=right) {if(str[left]!=str[right]) return false left++,right--}return true
}
二、NC31 第一个只出现一次的字符
描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回
-1(需要区分大小写).(从0开始计数)
示例1
输入: “google”
返回值: 4
思路:维护一个map,先遍历一遍字符串,将每个字符以及其出现的次数存入map,接着再次遍历一遍字符串,查询每次遍历的字符出现的次数,如果次数为1则返回。没有返回-1
function FirstNotRepeatingChar(str){const map = new Map() for(let char of str) {if(!map.get(char)) {map.set(char,1)}else{map.set(char,map.get(char)+1) }}for(let i =0;i<str.length;++i) {const char = str[i] if(map.get(char)==1) {return i}}return -1}
三、NC55 最长公共前缀
描述 编写一个函数来查找字符串数组中的最长公共前缀。
示例1
输入: [“abca”,“abc”,“abca”,“abc”,“abcc”]
返回值: “abc”
思路:
- 将字符串数组按照字典集排序;
- 将第一个字符与最后一个进行比较。
function longestCommonPrefix(strs) {if(!strs||strs.length<=0) return ""if(strs.length==1) return strs[0]strs.sort() let len = strs.length let l = Math.min(strs[0].length,strs[len-1].length)let maxStr = ""for(let i=0;i<l;i++) {for(let j= i+1;j<l+1;j++) {let subStr = strs[0].substring(i,j) if(strs[len-1].indexOf(subStr)>=0) { maxStr = maxStr.length>subStr.length?maxStr:subStr}}}return maxStr}
四、NC103 反转字符串
描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
示例1
输入: “abcd”
返回值: “dcba”
思路1: 倒着遍历目标字符串,每次将字符赋给一个变量,最后就是反转的效果。
时间复杂度: O(n)
function solve( str ) {let ret = "" for(let i =str.length-1;i>=0;i--) {ret = ret + str[i]}return ret
}
思路2:双指针
时间复杂度: O(n/2)
function solve_( str ) {//由于js语言不能操作地址,所以先将str转为数组形式let strs = str.split('') let i =0,j = strs.length-1while(i<j) {let t = strs[i] strs[i] = strs[j] strs[j] = t i++j-- }return strs.join("")
}
五、NC113 验证IP地址
描述 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址
IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1;
同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如,
2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0
开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的
IPv6 address地址 (即,忽略 0 开头,忽略大小写)。然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (:
前端程序员大厂面试精选100道算法题2相关推荐
- 程序员面试题精选100题
程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向. 比如将二元查找树 ...
- [程序员面试题精选100题]13.第一个只出现一次的字符
[题目] 在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. [分析] [代码] /********************************* * 日期:2013- ...
- 程序员面试题精选100题(51)-顺时针打印矩阵
// 程序员面试题精选100题(51)-顺时针打印矩阵.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostre ...
- 程序员面试题精选100题:求从1到n的正数中1出现的次数
// 程序员面试题精选100题(25):求从1到n的正数中1出现的次数 // 如 f(253) = (2!=0) * 100 + 2 * f(99) + (5!=0) * 10 + 5 * f(9) ...
- 程序员面试题精选100题:41-50解题报告
程序员面试题精选100题(41)-把数组排成最小的数[算法] 题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个.例如输入数组{32, 321},则输出这两个能 ...
- 程序员面试题精选100题:11-40解题报告
程序员面试题精选100题(11)-求二元查找树的镜像[数据结构] 题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点.用递归和循环两种方法完成 ...
- 前端程序员怎么面试找工作?前端面试技巧分享
我面试过很多前端程序员,非常了解面试者和面试官的心理,我可以很负责的告诉你: 就算面试你的人说你只能拿8K,但是你完全可以通过各种方法去拿到10K以上的薪资! 面试的时候面试官都是什么样的心理? 大多 ...
- 程序员面试题精选100题(30)-赋值运算符重载函数[C/C++/C#]
问题:给出如下CMyString的声明,要求为该类型添加赋值运算符函数. class CMyString { public: CMyString(char* pData = NULL); ...
- BAT七年经验,却抵不过外企面试的两道算法题?
整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...
最新文章
- 如何快速理解递归——看这个就可以了
- 唐骏给李开复泼冷水:创业不可复制
- 2017上海金马五校赛 丢史蒂芬妮 博弈问题
- php tool pagination,php实现分页工具类分享
- 对keep-alive组件的理解
- python tornado websocket_Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法...
- linux新建用户不显示,linux系统无法添加用户帐号的原因分析
- m-qam matlab,基于matlab的M_QAM通信系统仿真.doc
- Angular (Full App) with Angular Material, Angularfire NgRx 第3章 21节
- word保存不了磁盘已满_【Word技巧】word使用终极技巧,工程人必会(二)
- java中的oop是什么意思_什么是面向对象编程(OOP)?
- 题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】
- 收藏多年的MySQL函数大全笔记,笔记一生一起走,那些日子不再有!
- 面试题:搜狐百度 看1 复杂一点的面试题 笔试题
- matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真
- 这是你不曾见过的最全的ASO应用市场优化方式(下篇)
- Python爬虫圈最能打的专栏教程,《Python爬虫120例》教程导航帖(2023.2.6更新)
- (OK) MIMP - 17 ( 5 nodes) - 抓包-缺少 MPTCP-JION - 节点1:服务器 mptcp-kmsg-server.txt
- 华硕主板禁用UEFI安全启动(Disable Secure Boot for ASUS Motherboard)
- 湖南农业大学计算机专业考研大纲,湖南农业大学842信息化概论2020年考研专业课初试大纲...
热门文章
- 树莓派cpu检测_利用xively监控树莓派的CPU温度
- cpu温度过高 ubuntu_如何在Ubuntu Linux中检查CPU温度
- 2020PMP(第六版)每日三题
- android-魔法泡泡动画分析(附源码)
- PHP count() empty() isset() 的应用
- STL算法——函数对象(仿函数)
- 【十分钟包学会】EndnoteX9搜索、管理文献快速上手教程(其他版本操作类似)
- js弹框,并指定的url
- 2017年「编码美丽」公众号优秀精华文章回顾,感谢有您的一路陪伴!
- 一年考研经历的回顾和总结(2)——不一样的辞职考研