Day 52

第459题:

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。(来自LeetCode)

 

1、如果 s 字符串是子串 s1 对此重复 x 次拼接而成的,那么s的长度一定是s1长度的倍数,而且s的开头一定是s1的开头;

  那么就顺序遍历子串长度为1-n/2时,各子串是否相同,子串长度为 i ,那么s内第 j 个字符如果和第 j - i 个字符相等,且往后判断结束后都相同的话;

  s就一定是一个重复的字符串。

  

 第455题:

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

来源:力扣(LeetCode)

注意:你可以假设胃口值为正一个小朋友最多只能拥有一块饼干。

1、将最小的饼干给最小胃口的小孩,依次向大的方向判断;

  所以先将两数组排序,再对数组内元素遍历判断,得出最大可满足的小孩数量。

  

第456题:

给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。来源:力扣(LeetCode)

注意:n 的值小于15000。

 

 

 1、需要在数组种寻找是否含有132模式的子序列;

  可以看成是寻找一个a[j],然后在[ 0,j-1 ]内寻找一个比a[j] 小的数M1,且在[ j-1,n-1]内寻找一个比a[j]小的数M2,且M2>M1;

  利用栈来帮助寻找这个模式;

  •   先将数组内各段内的最小值找出作为132种的1
  •   然后遍历数组来寻找2,2必须要大于1,且2的下标也要大于1的下标,那么就从数组末尾开始遍历;当遍历到的元素大于此时队列里的最小值时,说明它可以作为2,那么将它入栈
  •   继续向前遍历,如果元素小于2但是大于1的话,也将元素入栈,因为那样时123,不是132
  •   因为栈内时寻找2,所以2必须要一直大于1(也就是此时序列内的最小值),如果不满足,需要将栈顶元素移除,直到栈顶元素大于此时序列的最小值
  •        继续向前遍历,如果遍历元素大于1(min)且大于栈顶元素,说明满足132模式,可以返回 true,如果遍历完后找不到就返回false

  

  



  

posted @ 2020-08-24 23:49  Liang-Yi  阅读(172)  评论(0编辑  收藏  举报