Hello,靓仔,我是Griffin Brian。这是我第二篇关于AI刷题的文章。现在开始超快解题吧!
珠子颜色去重
问题描述
小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代码分析
- 复制并反转数组:
array = a[::-1]:这行代码使用了 Python 的切片功能来反转列表a。[::-1]表示从开始到结束,步长为 -1,即逆序。
- 去重:
num = []:初始化一个空列表num,用来存储不重复的元素。for i in array::遍历反转后的数组array。if i not in num::检查当前元素i是否不在列表num中。num.append(i):如果i不在num中,将其添加到num列表中。
- 返回结果:
return num[::-1]:最后,再次使用切片[::-1]将num列表反转,以确保元素的顺序是它们最后一次出现的顺序,并返回这个列表。
总结:
感谢靓仔,这是我发布的第一篇中等题目解答,有你的观看是我的荣幸。