数组题目索引

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

 

posted @ 2020-06-17 22:24  ChevisZhang  阅读(150)  评论(0编辑  收藏  举报