第五天华为机考练习(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(nm)

{

    // write code here

    let arr = []

    let k=0,j=0

    for(let i=0;i<n;i++){

        arr.push(0)

    }

    if(m==0return -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

};

每天练习算法题针对华为机考

全部评论

相关推荐

今天 11:08
已编辑
上海大学 Java
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务