zoukankan      html  css  js  c++  java
  • 数组题目索引

    https://mp.weixin.qq.com/s?__biz=MzI0OTQwMTA5Ng==&mid=2247483819&idx=1&sn=071731261441f702f429ae9fc1b98b84&chksm=e9935bccdee4d2da68f0a62830c23daba65fe81c42f4f04f0f5358f1b76bcf144b70f3b4a30d&token=1778626027&lang=zh_CN#rd

    文章内容转载自 微信公众号Charlotte数据挖掘,作者Charlotte77总结了三种一维数组中较为常见的题型:

      

      1. K-sum  

          这类题目通常会给定一个数组和一个值,让求出这个数组中两个/三个/K个值的和等于这个给定的值target。leetcode第一题就是two-sum,对于这类题目,首先看题目要求的时间复杂度和空间复杂度是什么,其次看有没有限制条件,如要求不能有重复的子数组或者要求按照升序/降序排列等。解法如下:

      • 暴力解法:最常见,但是通常会超时,只能作为备选,

      • hash-map:建立一个hash-map循环遍历一次即可

      • two-pointers:定位两个指针根据和的大小来移动另外一个。这里设定的指针个数根据题目中K的个数来定。3Sum中可以设定3个指针,固定两个,移动另一个

      2. 区间问题

        1)这类题目通常会给一个包含多个子数组的数组,然后针对区间是否重合来判断true or false。

        2)学到给二维数组排序: 

          nums.sort(key = lamda x : x.start)   # 按子列表第一个元素来排序

      3.子数组类题目

        这类题目通常会在一个包含多个子数组的数组中,求和/积,最大最小等。形式有很多种,例如求一个数组中和最小的子数组(209题),或者积最小的子数组(238题)

        解法:

          1)sliding window 外层for循环使得右边界 right_point 一直遍历

          2)当满足条件时,内层while循环不断向右移动左边界 left_point 直到不满足while的判断条件

        

      •   例题:209 Minimum Size Subarray Sum[Medium]

      •   题目理解:给定我们一个数字,让我们求子数组之和大于等于给定值的最小长度

      •   test case:

      Input: s = 7, nums = [2,3,1,2,4,3]

      Output: 2

      解释:满足子数组和=7的最小长度数组是[4,3],所以output=2

  • 相关阅读:
    POST和GET的区别
    Java设计模式6大原则
    JAVA23种工厂模式
    使用jsp实现用户登录请求
    MVC模式
    使用idea查询数据库内容
    mysql常见错误
    定义外键和建表原则
    CSS制作圆角边框
    2、JS的编写位置
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/13155055.html
Copyright © 2011-2022 走看看