• Day 34


    第343题:

    给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。来源:力扣(LeetCode)

    示例 1:

    输入: 2
    输出: 1
    解释: 2 = 1 + 1, 1 × 1 = 1。

    1、对于n,当n=0/1的时候它不可以拆分,当n>=2时,它可以拆分成至少两个数;

      此时就来求这至少是两个数的最大乘积dp[n];

      例如拆分出来的第一个数是j,那么后面n-j要么也拆分求最大乘积dp[i-j]或者不拆分直接为i-j;

      因此可以使用动态规划求解。

      

    2、动态规划求解还可以进行优化;

      对于任意的 j ,当 j 为奇数时,j=(j-1)/2+(j+1)/2;

             当 j 为偶数时,j=(j/2)*(j/2);

      而上述情况中,当 j >=4的时候上面的等式会变成 j 小于(j-1)/2+(j+1)/2 或者(j/2)*(j/2);

      所以当j>=4的时候,dp[i]肯定是大于j*dp[i-j],且dp[i-j]肯定大于(i-j);

      还有当j=1时,dp[i]<i,这样的话,比较时也不用来判断j=1时的情况了;

      所以我们只需要求j=2或者j=3的情况

      

    面试题 08.03:

    魔术索引。 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。来源:力扣(LeetCode)

    示例1:

    输入:nums = [0, 2, 3, 4, 5]
    输出:0
    说明: 0下标的元素为0

    1、直接遍历数组,判断元素和索引是否相等;

      按不同情况来划分步骤。

      

    2、也可以使用二分剪枝来判断数组中是否存在魔术索引;

      每次我们选择数组的中间元素,如果当前中间元素是满足条件的答案,那么这个位置往后的元素我们都不再考虑,只要寻找左半部分是否有满足条件的答案即可;

      否则我们需要查看左半部分是否有满足条件的答案,如果没有的话我们仍然需要在右半边寻找,使用的策略同上。

      

    第118题:

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。(来自LeetCode)

    在杨辉三角中,每个数是它左上方和右上方的数的和。

    1、直接按照杨辉三角的规则来推入元素;

      只有知道了第一行才可以计算处下一行的元素。

      

  • 相关阅读:
    监控服务器配置(一)-----Prometheus安装配置
    mongo可视化工具adminMongo安装
    Grafana 下载与安装(v5.4.1)
    Grafana+Prometheus系统监控之Redis
    聊聊redis的监控工具
    Linux 服务器buff/cache清理
    redis为什么内存不宜过大
    Python 操作 mongodb 亿级数据量使用 Bloomfilter 高效率判断唯一性 例子
    Redis-3.2.0集群配置(redis cluster)
    在reshard过程中,将会询问reshard多少slots:
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13412886.html
Copyright © 2020-2023  润新知