牛客网题目
day1
- 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
JavaScript
// 方法一
var unit = readline()
var arr = unit.split(' ')
if(unit && arr.length < 5000 ){
console.log(arr[arr.length - 1].length)
}
// 方法二
var unit = readline()
var i = unit.length - 1;
while (i > -1) {
if (unit[i] === ' ') break;
i -= 1;
}
console.log(unit.length - 1 - i)
- 接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
JavaScript
// 方法一
var str = readline().toLowerCase()
var key = readline().toLowerCase()
console.log(str.split(key).length -1)
// 方法二
console.log(str.match(new RegExp(`${key}`,'ig') || []).length)
//方法三
var num = 0
str.split('').forEach((i)=>{
i==key ? num++ : ''
})
console.log(num)
- 生成N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
JavaScript
// 方法一
let n = parseInt(readline());
let arr = [...Array(n)].map(() => readline());
Array.from(new Set(arr)).sort((a, b) => a - b).map((e) => console.log(e));
//方法二
const num = readline()
const N = parseInt(num)
let arry = []
for(let i=0;i<N;i++){
let val = readline()
let index = parseInt(val)
arry[index] = 1
}
for (let i=1;i<arry.length;i++){
if(arry[i]){
console.log(i)
}
}
树形数据结构化-递归
JavaScript
const treeData = function formatDataTree(data) {
let parents = data.filter(p => p.pid === 0),
childs = data.filter(c => c.pid !== 0)
dataToTree(parents, childs)
return parents
}
function dataToTree(params) {
parents.map(p => {
childs.map((c, i) => {
if (p.pid === c.pid) {
let _children = JSON.parse(JSON.stringify(children))
_children.splice(i, 1)
dataToTree(c, _children)
if (p.children) {
p.children.push(c)
} else {
p.children = [c]
}
}
})
})
}
树形数据结构化-扁平化
JavaScript
function flatDataTree(data) {
let _data = JSON.parse(JSON.stringify(data))
return _data.filter(p => {
const _arr = _data.filter(c => p.pid === c.pid)
_arr.length && (p.children = _arr)
return p.pid === 0
})
}
- 接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
JavaScript
// 方法一
- 接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
JavaScript
// 方法一
- 接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
JavaScript
// 方法一
- 接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
JavaScript
// 方法一
HJ108 求最小公倍数
最大公约数(最大公因数或最大公约子,英语:Greatest Common Divisor,简写为GCD)是几个自然数公有约数中最大的一个。 最小公倍数(英语:Least Common Multiple,简写为LCM)是几个自然数公有公倍数中最小一个。
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
最大公约数:辗转相除法(欧几里德算法)
该方法就是通过将要寻找最大公约数的两个数字进行重复除法,直到最后得到余数为0
下面我们就用辗转相除法来找出24和60的最大公约数
用两数种较小的数去除较大的数,这里我们就要用24除60,得到商为2,余数为12。 接下来用上一步所得到的余数去除较小的数,也即12除24,商为2,余数是0。 既然已经得到余数为0,那么最后一个除数12,就是我们要找的最大公约数。 下面我们再看一个例子:试找出40和64的最大公约数
- 64 ÷ 40 = 1 ⋯⋯ 24
- 40 ÷ 24 = 1 ⋯⋯ 16
- 24 ÷ 16 = 1 ⋯⋯ 8
- 16 ÷ 8 = 2 ⋯⋯ 0
得到余数为0,最后一个余数是8,因此40和64的最大公约数就是8。
js
function calculateLCM(num1, num2) {
let smaller = Math.min(num1, num2),
bigger = Math.max(num1, num2),
remainder = bigger % smaller
if (remainder === 0) return smaller
calculateLCM(remainder, smaller)
}
let lcm = smaller * bigger / calculateLCM(40, 64)
HJ107 求解立方根
计算一个浮点数的立方根,不使用库函数。保留一位小数。
HJ106 字符逆序
js
let rStr = str.split('').reverse().join('')
HJ105 记负均正
- 首先输入要输入的整数个数n,然后输入n个整数。
- 输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。
- 0即不是正整数,也不是负数,不计入计算。
- 如果没有正数,则平均值为0。