快手笔试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) } })