leetcode每日一题——美团笔试题【1】

在这里插入图片描述

今天分享两道算法题,自己刚开始练习,可能在解法上不是最佳的,但是只提供一些自己的思路,欢迎大家多多指教~

第一题

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例 1:

输入: s = "leetcode"
输出: false 
示例 2:

输入: s = "abc"
输出: true

限制:

  • 0 <= len(s) <= 100
  • s[i]仅包含小写字母
  • 如果你不使用额外的数据结构,会很加分。

解法1:将字符串分别按字符进行循环,存到一个list列表中,再使用set方法进行去重复,如果这样处理完之后的set集合的长度和原字符串长度相同,那么此字符串s的所有字符全都不同,反之处理后的长度会小于原字符串长度。

代码

class Solution:  
    def isUnique(self, astr: str) -> bool:
        res = []
        for i in astr:
            res.append(i)
        res = set(res)

        return len(res) == len(astr)

解法2:直接使用list方法将每个字符存入列表,再使用set方法进行去重复,如果这样处理完之后的set集合的长度和原字符串长度相同,那么此字符串s的所有字符全都不同,反之处理后的长度会小于原字符串长度。

代码

class Solution:
    def isUnique(self, astr: str) -> bool:
        new_str = list(astr)
        return len(set(new_str)) == len(astr)

在这里插入图片描述

第二题

mex

时间限制: 2000/1000 MS (Java/Others)
内存限制: 65536/65536 K (Java/Others) 
问题描述
若S表示一个非负整数集合,mex(S)的值为不属于集合S的最小非负整数。例如,mex({0, 1, 4}) = 2,mex({1, 2}) = 0。
有n个互不相同的非负整数a1, a2, … an 构成了一个非负整数集合A。小美想知道若将ai (1 ≤ i ≤ n)从集合A中删除,剩下的n-1个数构成的新集合A’的mex值为多少?请输出i从1到n 所有取值下新集合的mex值。

输入描述
第一行输入一个整数n,表示集合A的大小。
第二行输入n个整数a1, a2, … an 。
输出描述
输出n个整数,相邻两个数之间用空格隔开。其中第i个数表示从集合A中删除ai,剩下n-1 个数构成的新集合的mex值 。

输入样例1
4
5 0 3 1
输出样例1
2 0 2 1

数据范围和说明
对于80%的数据, 2 ≤ n ≤ 100, 0 ≤ ai ≤ 100
对于100%的数据,2 ≤ n ≤ 50000, 0 ≤ ai ≤ 109,保证ai互不相同。

样例说明
删除第1个数5,mex({0, 1, 3}) = 2;
删除第2个数0,mex({5, 3, 1}) = 0;
删除第3个数3,mex({5, 0, 1}) = 2;
删除第4个数1,mex({5, 0, 3}) = 1。

解法

  1. 首先input函数读取序列长度和序列值组成的列表。
  2. 先创建一个结果列表res
  3. 定义mex函数,在对序列值列表的循环过程中拿到每次循环时除当前值之外的剩余元素的列表rest
  4. 根据题目的要求,目标值肯定不大于rest列表的最大值,那么从0开始循环,如果找到第一个不在rest列表中的值则break,并把此值添加到res列表中,最后循环完整个原始序列之后,返回的就是需要的结果组成的列表
  5. 调用函数,将结果依次打印出来
n = input()
arrays = list(map(int, input().split(' ')))
# print(n)
# print(arrays)

res = []
def mex(arrays):
    for i in arrays:
        rest = []
        # print(i)
        for j in arrays:
            if j != i:
                rest.append(j)
        # print(rest)

        # 找到目标值
        for element in rest:
            for i in range(max(rest)):
                if i not in rest:
                    res.append(i)
                    break
            break
    # print(res)
    return res

res = mex(arrays)
for i in res:
    print(i,end=" ")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值