中等题:珠子颜色去重(最快解题思路) | 豆包MarsCode AI刷题

122 阅读2分钟

Hello,靓仔,我是Griffin Brian。这是我第二篇关于AI刷题的文章。现在开始超快解题吧!

C7D1A90B0489692F68B39F8DD9EC855A.jpg

珠子颜色去重

问题描述

小S拥有一条由n颗珠子组成的手链,每颗珠子都有一个对应的颜色编号。她希望将手链上相同颜色的珠子进行去重,只保留每种颜色最后出现的那颗珠子,同时保持珠子原来的相对顺序。

例如,如果珠子的颜色编号是 [1, 2, 1, 3, 4, 2, 4, 4],去重后的珠子颜色应该是 [1, 3, 2, 4]

测试样例

样例1:

输入:n = 8 ,a = [1, 2, 1, 3, 4, 2, 4, 4]
输出:[1, 3, 2, 4]

样例2:

输入:n = 5 ,a = [5, 5, 5, 5, 5]
输出:[5]

样例3:

输入:n = 6 ,a = [6, 1, 2, 6, 1, 2]
输出:[6, 1, 2]

题目分析:

这道题其实不需要看豆包给的几个案例,只需要抓住重点即可。

  • 给数组排在前面的数去重,只留最后一个
  • 注意不要打乱顺序

解题思路:

第一步:将数组倒序

第二步:遍历这个数组,将遍历到的值插入到新创建的空数组里,插入时做一个判断(空数组里面没有就插入)

第三步:倒序刚刚的新数组

完整python代码:

def solution(n, a):
    # 复制并反转数组
    array = a[::-1]
    num = []
    for i in array:
        if i not in num:
            num.append(i)
    return num[::-1]

def main():
    print(solution(8, [1, 2, 1, 3, 4, 2, 4, 4]) == [1, 3, 2, 4])
    print(solution(5, [5, 5, 5, 5, 5]) == [5])
    print(solution(6, [6, 1, 2, 6, 1, 2]) == [6, 1, 2])

main()

python代码看着比JavaScript代码简单一点,不过我还是喜欢用Javascript一点,哈哈。

完整javascript代码:

function solution(n, a) {
    // write code here
    let array=a.slice().reverse()
    let num=[]
    for (let i=0;i<array.length;i++){
        if(!num.includes(array[i]))
        {
            num.push(array[i])
        }
    }
    return num.slice().reverse()
}

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


main();

python代码分析

  1. 复制并反转数组
  • array = a[::-1]:这行代码使用了 Python 的切片功能来反转列表 a[::-1] 表示从开始到结束,步长为 -1,即逆序。
  1. 去重
  • num = []:初始化一个空列表 num,用来存储不重复的元素。
  • for i in array::遍历反转后的数组 array
  • if i not in num::检查当前元素 i 是否不在列表 num 中。
  • num.append(i):如果 i 不在 num 中,将其添加到 num 列表中。
  1. 返回结果
  • return num[::-1]:最后,再次使用切片 [::-1] 将 num 列表反转,以确保元素的顺序是它们最后一次出现的顺序,并返回这个列表。

总结:

感谢靓仔,这是我发布的第一篇中等题目解答,有你的观看是我的荣幸。