第五天华为机考练习(JavaScript node)
注:华为机试和剑指offer的JavaScript Node的书写方式不同,剑指offer只需学核心代码然后return,华为机试需要自写输入输出,输出console就行。
1.剑指offer 62 题: 圆圈中最后剩下的数字
https://www.nowcoder.com/questionTerminal/f78a359491e64a50bce2d89cff857eb6
描述
每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。然后,随机指定一个数 m ,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0... m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,哪个小朋友会得到这份礼品呢?
function LastRemaining_Solution(n, m)
{
// write code here
let arr = []
let k=0,j=0
for(let i=0;i<n;i++){
arr.push(0)
}
if(m==0) return -1
for(let i=0;k!==n-1;i=(++i)%n){
if(arr[i]==0){
j++
if(j==m){
j=0
arr[i]=1
k++
}
}
}
for(let i=0;i<n;i++){
if(!arr[i]) return i
}
return -1
}
module.exports = {
LastRemaining_Solution : LastRemaining_Solution
};
2.leetcode3无重复字符的最长子串(滑动窗口方法)
https://leetcode.cn/problems/longest-substring-without-repeating-characters/
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
/**
* @param {string} s
* @return {number}
*使用滑动窗口法:右边滑动,左边根据是否有重复字符来控制窗口大小,如果有重复,则左边要向右滑动直到窗口中没有重复字符。
*/
var lengthOfLongestSubstring = function(s) {
let arr=[]
let max=0
for(let str of s){
while(arr.includes(str)){
arr.shift()
}
arr.push(str)
max=Math.max(max,arr.length)
}
return max
};
3.leetcode14. 最长公共前缀
https://leetcode.cn/problems/longest-common-prefix/
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
let arr=[]
for(let i=1;i<=strs[0].length;i++){
let sub0=strs[0].slice(0,i)
for(let j=1;j<strs.length;j++){
let sub=strs[j].slice(0,i)
if(sub!==sub0){
return strs[0].slice(0,i-1)
}
}
}
return strs[0]
};
4.leetcode 151:反转字符串中的单词
https://leetcode.cn/problems/reverse-words-in-a-string/
给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
/**
* @param {string} s
* @return {string}
*/
var reverseWords = function(s) {
let arr=s.trim().split(/[ ]+/)
let revstr=arr.reverse().join(' ')
return revstr
};
每天练习算法题针对华为机考
查看9道真题和解析