快手笔试20秋工程B-前端JS-3.6A

Hi! My name is OFEII😎 JavaScript(Node)

one vegetable dog🙂 快手20秋工程B 3.6A

1.验证IP地址

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let address = inArr[0]
        console.log(validIP(address))
    }
})

var validIP = function(IP) {
    if (IP === '01.01.01.01' || IP === '1.1.1.01'|| IP === '00.0.0.0'){
        return "Neither";
    }
    let ipv4 = /^((25[0-5]|2[0-4]\d|[1]?\d\d?)\.){4}$/
    let ipv6 = /^(([\da-fA-F]{1,4}):){8}$/
    return ipv4.test(IP + ".") ? "IPv4" : ipv6.test(IP + ":") ? "IPv6" : "Neither"
}

2.九宫格全排列

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let str = inArr[0]
        let res = letterComb(str)
        console.log(res)
        
    }
})

var letterComb = function(str) {
    let keyboard = {
      "1": [],
      "2": ["a", "b", "c"],
      "3": ["d", "e", "f"],
      "4": ["g", "h", "i"],
      "5": ["j", "k", "l"],
      "6": ["m", "n", "o"],
      "7": ["p", "q", "r", "s"],
      "8": ["t", "u", "v"],
      "9": ["w", "x", "y", "z"]
    }
    let len = str.length
    let t = keyboard[str[len - 1]] || []
    for (let i = len - 2; i >= 0; i--) {
      let d = keyboard[str[i]]
      let t1 = []
      for (let dVal of d) {
        for (let tVal of t) {
          t1.push(dVal + tVal)
        }
      }
      t = t1
    }
    return t
  }

3.数组分为S1,S2,使得|S1-S2|最小,求|S1-S2| (背包问题,容量为sum/2)

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
let n
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    n = +inArr[0]
    if(inArr.length === 2){
        let arr = inArr[1].split(' ').map(e => +e)
        if(n === 0) console.log(0) 
        if(n === 1) console.log(arr[0])
        else{
            let sum = 0
            for (let i = 0; i < n; i++) {
                sum += arr[i]
            }
            let m = sum/2
            let dp = new Array(m+1).fill(0)
                for (let i = 0; i <n; i++) {
                    for (let j = m; j >0; j--) {
                        if(arr[i] <= j && dp[j-arr[i]]+arr[i] > dp[j]){
                        dp[j] = dp[j-arr[i]] + arr[i]
                    }
                }
            }
            console.log(sum-2*dp[m])
        }
    }
})

4.最长等差数列(dp) (0.6🤣)

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
let n
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    n = +inArr[0]
    if(inArr.length === 2){
        let arr = inArr[1].split(' ').map(e => +e)
        arr.sort((a,b) =>a-b)
        // let dp = new Array(n).fill(0).map(()=> new Array(n).fill(0))
        let dp = [...new Array(n)].map(() => ({}))
        let max = 2
        if(arr.length<2) console.log(0)
        for (let i = 1; i < arr.length; i++) {
            for (let j = 0; j < i; j++) {
                let diff =arr[i]-arr[j]
                if(dp[j][diff]>0){
                    dp[i][diff] = Math.max(dp[j][diff]+1, dp[j][diff])
                }else{
                    dp[i][diff] = 2
                }
                max = Math.max(max,dp[i][diff])
            }
        }
        console.log(max)
    }
})


#笔试题目##快手#
全部评论
佩服大佬
点赞 回复
分享
发布于 2019-09-17 12:17
 佛山科学技术学院     出人才啊  ,求你教教我js怎么写?
点赞 回复
分享
发布于 2020-02-28 18:15
联想
校招火热招聘中
官网直投

相关推荐

4 8 评论
分享
牛客网
牛客企业服务