📜  CouponDunia 面试经历 |第 2 套(更新鲜)(1)

📅  最后修改于: 2023-12-03 15:14:15.951000             🧑  作者: Mango

CouponDunia 面试经历 | 第 2 套(更新鲜)

背景介绍

CouponDunia是印度最大的优惠券平台,总部位于孟买。该公司成立于2010年,目前已经成长为印度在线购物市场的领导者之一。CouponDunia的使命是帮助用户在他们的购物中节省钱。

面试题目
题目一

题目描述: 给定一组数字,找到数字中第二大的数字。如果没有第二大的数字,则返回-1。比如,给定数组[2, 3, 6, 6, 5],返回5。

解题思路:

  • 对数组进行去重,得到一个新的数组。
  • 对新的数组进行排序。
  • 判断排序后的数组长度是否大于1。如果是,则返回倒数第二个元素;如果不是,则返回-1。

代码实现:

def find_second_largest(arr):
    distinct_arr = list(set(arr))
    if len(distinct_arr) < 2:
        return -1
    distinct_arr.sort()
    return distinct_arr[-2]
题目二

题目描述: 给定一组具有重复元素的数字,找到一个子数组,使得该子数组中的所有元素都是唯一的。比如,给定数组[1, 2, 3, 2, 4, 5, 3, 6],应该返回[4, 5, 3, 6],因为这是该数组中唯一的子数组,其中所有元素都是唯一的。

解题思路:

  • 遍历数组,从每个元素开始,找到一个最长的子数组,使得该子数组中所有元素都是唯一的。
  • 对于每个元素,从该元素开始往后遍历,找到最长的子数组满足其中元素都是唯一的。需要用到哈希表进行计数。
  • 将每个满足条件的子数组与已知的最长子数组进行比较,取长度较大的那一个。

代码实现:

def find_unique_subarray(arr):
    res = []
    for i in range(len(arr)):
        cur = set()
        for j in range(i, len(arr)):
            if arr[j] in cur:
                if len(res) < len(cur):
                    res = list(cur)
                break
            cur.add(arr[j])
        else:
            if len(res) < len(cur):
                res = list(cur)
    return res
总结

在这次面试中,我解决了两个算法问题。我感觉自己的解题思路还不错,但是代码实现可能还有一些可以优化的地方。面试官也给了我一些反馈和建议,帮助我改进代码。我很感激这次面试机会,也很欣赏CouponDunia的工作文化和团队氛围。我希望能成为他们团队中的一员,为他们的使命贡献我的力量。