zoukankan      html  css  js  c++  java
  • 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、直接按照杨辉三角的规则来推入元素;

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

      

  • 相关阅读:
    sql 用Group by分组后,取每组的前几条记录
    mac安装 配置 ant
    js日期时间比较函数
    hibernate下载包中配置文件路径
    dbvis MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
    严重: Exception starting filter struts2解决方法!
    【Linux】进程优先级、进程nice值和%nice
    【Algorithm】二分查找
    【php】thinkphp以post方式查询时分页失效的解决方法
    【C语言】练习5-8
  • 原文地址:https://www.cnblogs.com/liang-yi-/p/13412886.html
Copyright © 2011-2022 走看看