zoukankan      html  css  js  c++  java
  • 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

      

      



      

  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13557269.html
Copyright © 2011-2022 走看看