当前位置: 首页 > article >正文

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=" ")

http://www.kler.cn/a/13688.html

相关文章:

  • 【1】从零开始学习目标检测:YOLO算法详解
  • 【数据结构】数据结构小试牛刀之单链表
  • 关于git这一篇就够了
  • Scala之面向对象(2)
  • Java阶段二Day05
  • react知识库
  • 【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)
  • Java7
  • 机器学习——SVM的易错题型
  • ES使用小结
  • 时序预测 | MATLAB实现SSA-LSTM、LSTM麻雀算法优化长短期记忆神经网络时间序列预测(含优化前后对比)
  • 在VMmare上安装Windows 2003
  • D3.js(3) path/折线图
  • apple pencil值不值得购买?ipad平替电容笔安利
  • JavaSE-part2
  • Java 线程
  • flutter protobuf插件的安装和使用
  • Harmony OS 开发指南——DevEco Device Tool 安装配置
  • 【java】池技术--连接池 线程池 内存池 进程池等汇总分析
  • Vue之指令详解与自定义指令