数字序列
东东从京京那里了解到有一个无限长的数字序列: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, ...(数字 k 在该序列中正好出现 k 次)。东东想知道这个数字序列的第 n 项是多少,你能帮帮他么 ?
/*
第一项:1 —— 占1个序列
第二项:2 2 ——占2个序列
第三项:3 3 3 ——占3个序列
···
第k项: k1 k2 k3 ··· kk ——占k个序列
求第169个序列所在第几项?
故求第n个序列就是求第k项的前k项和,由是等差数列,n=k(k+1)/2,
因为第k项不管是k几序列,算出的都是小于或等于k的,故向上取整。
代码实现:
*/
// 整体排序
function getItem01(num) {
return Math.ceil((Math.sqrt(1 + 8 * num) - 1) / 2);
}
console.log(getItem01(169)); // 18
// 顺序算法
function getItem02(num) {
for (let i = 1; i < num; i++) {
if ((i * (i - 1)) / 2 <= num && (i * (i + 1)) / 2 >= num) {
return i;
}
}
}
console.log(getItem02(169)); // 18
去除字符串中出现次数最少的字符,不改变原字符串的顺序
let str = 'aaabbbccafeeff';
function removeLeastFrequentCharacter(str) {
const charCount = {};
for (const char of str) {
if (charCount[char]) charCount[char]++;
else charCount[char] = 1;
}
let minCount = Math.min.apply(null, Object.values(charCount));
let results = '';
for (const char of str) {
if (charCount[char] !== minCount) results = results + char;
}
return results;
}
removeLeastFrequentCharacter(str);