zoukankan      html  css  js  c++  java
  • 力扣题目汇总(单调数列,两个数组的交集Ⅱ,学生出勤记录Ⅰ)

    力扣题目汇总(单调数列,两个数组的交集Ⅱ,学生出勤记录Ⅰ)

    单调数列

    1.题目描述

    1. 如果数组是单调递增或单调递减的,那么它是单调的

      如果对于所有 i <= jA[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= jA[i]> = A[j],那么数组 A 是单调递减的。

      当给定的数组 A 是单调数组时返回 true,否则返回 false

      示例 1:

      输入:[1,2,2,3]
      输出:true
      

      示例 2:

      输入:[6,5,4,4]
      输出:true
      

      示例 3:

      输入:[1,3,2]
      输出:false
      

      示例 4:

      输入:[1,2,4,5]
      输出:true
      

      示例 5:

      输入:[1,1,1]
      输出:true
      

      提示:

      1. 1 <= A.length <= 50000
      2. -100000 <= A[i] <= 100000

    2.解题思路

    #解题思路:
    排序LIST有内置函数sort,不过SORT他默认是递增,这里我们可以对要验证的列表进行切片旋转
                    
    

    3.解题

    class Solution:
        def isMonotonic(self, A: List[int]) -> bool:
            import copy
            A_2 = copy.deepcopy(A)
            A_2.sort()
            if A_2 == A or A_2 == A[::-1]:
                return True
            else:
                return False            
    

    两个数组的交集 II

    1.题目描述

    给定两个数组,编写一个函数来计算它们的交集。

    示例 1:

    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2,2]
    

    示例 2:

    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]
    

    说明:

    • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
    • 我们可以不考虑输出结果的顺序。

    进阶:

    • 如果给定的数组已经排好序呢?你将如何优化你的算法?
    • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

    2.解题思路

    根据题意走没什么特别的思路
    

    3.解题

    class Solution:
        def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
            new_list = []
            if len(nums1) <len(nums2):
                for a in nums1:
                    if a in nums2:
                        new_list.append(a)
                        nums2.remove(a)
            else:
                for a in nums2:
                    if a in nums1:
                        new_list.append(a)
                        nums1.remove(a)
            return new_list
    

    学生出勤记录 I

    1题目描述

    给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:

    1. 'A' : Absent,缺勤
    2. 'L' : Late,迟到
    3. 'P' : Present,到场

    如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。

    你需要根据这个学生的出勤记录判断他是否会被奖赏。

    示例 1:

    输入: "PPALLP"
    输出: True
    

    示例 2:

    输入: "PPALLL"
    输出: False
    

    2.解题思路

    #A大于1肯定没有奖励
    #A小于1有L超过连续两次为没有奖励
    #其他情况均为有奖励
    

    3.解题

    class Solution:
        def checkRecord(self, s: str) -> bool:
            s_dict = dict()
            if s.count('A') > 1:
                return False
            else:
                for a in range(2,len(s)) :
                    if s[a]==s[a-1]==s[a-2]:
                        if s[a] not in s_dict:
                            s_dict[s[a]] = 1
                        if s_dict.get('L')== 1:
                            break    
                if s_dict.get('L',0) == 1:
                    return False
                else:
                    return True
    
    

    ```有更加好的思路,或者解题方法评论区留言谢谢``

  • 相关阅读:
    “指定的SAS安装数据(sid)文件不能用于选定的SAS软件订单
    windows下如何快速优雅的使用python的科学计算库?
    量化分析师的Python日记【第1天:谁来给我讲讲Python?】
    Python的lambda函数与排序
    使用python管理Cisco设备-乾颐堂
    python移除系统多余大文件-乾颐堂
    python算法
    python实现高效率的排列组合算法-乾颐堂
    使用python把图片存入数据库-乾颐堂
    Python将阿拉伯数字转化为中文大写-乾颐堂
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10937874.html
Copyright © 2011-2022 走看看