zoukankan      html  css  js  c++  java
  • 力扣题目汇总(存在重复,合并两个有序数组,搜索插入位置)

    存在重复元素

    1.题目描述

      1. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

        设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

        注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

        示例 1:

        输入: [7,1,5,3,6,4]
        输出: 7
        解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
             随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
        

        示例 2:

        输入: [1,2,3,4,5]
        输出: 4
        解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
             注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
             因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
        

        示例 3:

        给定一个整数数组,判断是否存在重复元素。
        
        如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
        
        示例 1:
        
        输入: [1,2,3,1]
        输出: true
        示例 2:
        
        输入: [1,2,3,4]
        输出: false
        示例 3:
        
        输入: [1,1,1,3,3,4,3,2,4,2]
        输出: true
        

    2.解题思路

    利用元祖去重,比长度
    

    3.解题

    class Solution:
        def containsDuplicate(self, nums: List[int]) -> bool:
            
    
            return len(nums) != len(set(nums))
            
    

    合并两个有序数组

    1.题目描述

      • 给定两个有序整数数组 nums1nums2,将 nums2 合并到 nums1使得 num1 成为一个有序数组。

        说明:

        • 初始化 nums1nums2 的元素数量分别为 mn
        • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2中的元素。

        示例:

        输入:
        nums1 = [1,2,3,0,0,0], m = 3
        nums2 = [2,5,6],       n = 3
        
        

    输出: [1,2,2,3,5,6]
    ```

    2.解题思路

    最大的问题是在原数据上修改,其他问题应不大
    

    3.解题

    class Solution:
        def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
            """
            Do not return anything, modify nums1 in-place instead.
            """
            start_nums1 = nums1[:m]
            nex_nums1 = nums2[:n]
            nums1.clear()
            for a in start_nums1:
                nums1.append(a)
            for b in nex_nums1 :
                nums1.append(b)
            nums1.sort()
    

    搜索插入位置

    1.题目描述

        1. 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

          你可以假设数组中无重复元素。

          示例 1:

        输入: [1,3,5,6], 5
        输出: 2
        
        **示例 2:**
        
        
        输入: [1,3,5,6], 2
        输出: 1
        
        **示例 3:**
        
        
        输入: [1,3,5,6], 7
        输出: 4
        
          **示例 4:**
        
        
        输入: [1,3,5,6], 0
        输出: 0
        
        
        
        

    2.解题思路

    跟着题目讲解走,我们先要实现,
    1.这个值再列表中,这个值插入后就是原先相同值的索引
    2,这个值不在列表中
    ⑴列表中的值有比这个大的,这个值插入就是刚刚好比他大的值的索引
    ⑵列表中的值没有有比这个大的,这个值插入就在末尾,末尾索引可以为len(列表)
    

    3.解题

    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            if target in nums:
                return nums.index(target)
            else:
                for a in range(len(nums)):
                    if nums[a] > target:
                        return a
                        break  #后面没必要进行运行了减少内存
                else:
                    return len(nums)
            
                
    

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

  • 相关阅读:
    【刷题】AtCoder Regular Contest 002
    【刷题】AtCoder Regular Contest 001
    【刷题】LOJ 2863 「IOI2018」组合动作
    (栈)栈 给定push序列,判断给定序列是否是pop序列
    网易面试题:和为n连续正数序列
    Google面试题:计算从1到n的正数中1出现的次数
    递归法
    打印给定字符串中字符的所有排列
    C++ 实现不能被继承的类
    atoi 实现
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10901484.html
Copyright © 2011-2022 走看看