AI刷题记录

7 阅读3分钟

一、找单独的数

1.问题描述

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。

要求:

  1. 设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

2.测试样例

样例1:

输入:cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
输出:4
解释:拿到数字 4 的同学是唯一一个没有配对的。

样例2:

输入:cards = [0, 1, 0, 1, 2]
输出:2
解释:数字 2 只出现一次,是独特的卡片。

样例3:

输入:cards = [7, 3, 3, 7, 10]
输出:10
解释:10 是班级中唯一一个不重复的数字卡片。

3.约束条件

  • 1 ≤ cards.length ≤ 1001
  • 0 ≤ cards[i] ≤ 1000
  • 班级人数为奇数
  • 除了一个数字卡片只出现一次外,其余每个数字卡片都恰好出现两次

4.代码


function solution(cards) {
    let result
    cards.forEach(item => {
        if (cards.indexOf(item) === cards.lastIndexOf(item)) {
            result = item
        }
    })

    return result;
}

function main() {
    console.log(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) === 4);
    console.log(solution([0, 1, 0, 1, 2]) === 2);
}

main();

二、数字字符串格式化

1.问题描述

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。


2.测试样例

样例1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例3:

输入:s = "987654321"
输出:'987,654,321'

3.代码

测试用例中含0开头的及数值超长的用例,若使用Number处理0开头的,数值超长的数字则会变,如7713490060187657677134900601876580,若不用Number则需要字符串处理,0还是需要正则完成

注意:

  1. 前置0需要去除----正则
  2. 数值超长按照Number处理数值会变
  3. 小数点前为0直接返回----特殊逻辑
  4. 整数部分、小数部分分开处理
function solution(s) {
    const arrNum = s.split('.');
    const dealNum = arrNum[0].replace(/^0+/, '') || '0';
    if (dealNum === '0') {
        return s;
    }
    const arr1 = dealNum.split('').reverse();
    const curArr = []
    const mapCount = Math.ceil(arr1.length / 3)
    new Array(mapCount).fill(1).forEach(((item, ind) => {
        const curStr = arr1.join('').substr(ind * 3, 3)
        curArr.push(curStr)
    }))
    const finalStr = curArr.join(',').split('').reverse().join('');
    return arrNum[1] ? finalStr + '.' + arrNum[1] : finalStr
}

function main() {
    console.log(solution("0000123456789.99"))
    console.log(solution("77134900601876576"))
    console.log(solution("0.987654321") === '0.987654321');
    console.log(solution("1294512.12412") === '1,294,512.12412');
    console.log(solution("0000123456789.99") === '123,456,789.99');
    console.log(solution("987654321") === '987,654,321');
}

main();