题目

最少立方数之和
链接:https://www.nowcoder.com/questionTerminal/4bc284dc9d0144628a722eb5d1191ef3?toCommentId=3672120

时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M
算法知识视频讲解
给出一个数字N(0<N<1000000),将N写成立方数和的形式,求出需要的最少立方数个数。
例如N=17,1+8+8 = 17,最少需要3个立方数,则输出3。
N= 28,1+1+1+1+8+8+8=28, 需要7个立方数,1+27=28,需要2个立方数,所以最少立方数为2,则输出2。

输入描述:
一个数字N(0<N<1000000)

输出描述:
最少立方数个数
示例1
输入
28
输出
2

思路与代码

1.动态规划
借鉴至评论区
设dp[n]为组成 n需要的最少立方数个数
精髓所在:找的是所有差一步可以组成n的方案,求最小值加一;
dp[n] = 1 + min(dp[n-1],dp[n-8],dp[n-27],…) 要求n-iii>=0

import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner input = new Scanner(System.in);int n = input.nextInt();int[] dp = new int[n+1];dp[0] = 0;dp[1] = 1;for(int i = 2;i<=n;i++){int min = Integer.MAX_VALUE;//用于保存最小的个数for(int j = 1;j*j*j<=i;j++){//找到最小的min = Math.min(min,dp[i-j*j*j]);}dp[i] = min + 1;}//System.out.println(dp[n]);}
}

2.dfs
首先生成小于N的立方数,存入集合中,接下来用N对集合中一个个立方数从大到小进行相减,最后如果刚好等于0,即成功,若不等于0则退出递归进行下一次循环。在递归中再加上判定统计立方数的数量是否大于目前最小立方数之和的剪枝操作。时间复杂度稍高,但是容易理解,也能通过所有测试用例

public class Main {static int min = Integer.MAX_VALUE;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();//把小于n的立方数装进集合List<Integer> al = new ArrayList<>();for (int i = 1; i < 100; i++) {if(Math.pow(i, 3)>n) {break;}else if (Math.pow(i, 3)==n) {System.out.println(1);return;}else {al.add((int)Math.pow(i, 3));}}int sum = 0;dfs(n,sum,al,al.size()-1);System.out.println(min);}private static void dfs(int n, int sum, ArrayList<Integer> al,int begin) {if(n==0) {//刚好够装,判定目前的总个数(sum)是否小于最小的,是的话min等于目前的sumif(sum<min) {min = sum;}}if(n<0||sum>min) {//n小于0,不够装  return    ||   使用次方数个数已经超过了目前最小的次方数    returnreturn;}for (int i = begin; i >=0; i--) {dfs(n-al.get(i), sum+1, al, i);}}}

小米2019秋招面试算法题 最少立方数之和 dp与dfs解法相关推荐

  1. 小米2019秋招笔试真题--厨艺大赛奖金

    小米食堂每年都会举办一次厨艺大赛,假设参赛的厨师一共有n位(n < 1000),比赛结束后没有公布评分,但是站在领奖台上的一排厨师中每位厨师都能看到与自己相邻的厨师(左或者右)里评分比自己低(看 ...

  2. 华为2019秋招面试问答题!(附带笔试参考题)

    前言: 采菊东篱下,悠然见南山",菊花厂的名气就不多介绍了! 今天为大家带来的内容是华为2019秋招面试问答题!(附带笔试参考题)具有不错的参考意义,希望能够帮助到大家! 内容如下: 总共分 ...

  3. 秋招笔试算法题——电容充电

    秋招笔试算法题--电容充电 牛客网<笔试真题精选2019> 字节跳动2018秋招笔试题4 [题目描述]有一台用电容组成的计算器,其中每个电容组件都有一个最大容量值(正整数). 对于单个电容 ...

  4. 小米2019秋招系统软件开发笔试题详解

    小米2019秋招系统软件开发笔试题详解 兄弟们,给大家个题目玩一玩,题目如下: @ 在游戏Dota2中,有一位非常强大的英雄卡尔,他有三种属性:冰.火.雷.同时卡尔身上有三个无顺序的属性槽,他可以从三 ...

  5. 腾讯2019秋招笔试真题

    1.小Q爬塔 描述:小Q正在攀登一座宝塔,这座塔很特别,塔总共有n曾层,但是没两层之间的净高却不相同,所以造成了小Q爬过每层的时间也不同.如果某一层的高度为x,那么爬过这一层锁需的还是件也是x.小Q孩 ...

  6. 2021年秋招面试真题以及面试技巧分享

    一.前言 先介绍下自己吧,20届二本院校毕业,java岗,大四上开始实习,毕业一年,两年工作经验,今年秋招也是因为一些原因打算换份工作,我是10月初投的简历,boss投了60多家,面试7家,五家谈of ...

  7. 和芯星通2019秋招面试

    投递简历 我是大概6.5号看到和芯星通去南京秋招宣讲会的,讲真开始的真早,其实我当时只知道是一家做北斗芯片导航的公司,我现在对他了解也仅此而已,简历直接发到HR邮箱,一看就没BAT逼格高..哈哈 直接 ...

  8. 2019春招面试高频题(Java版),持续更新(答案来自互联网,以及一些自己看的书)...

    第一模块--并发与多线程 Java多线程方法: 实现Runnable接口, 继承thread类, 使用线程池 操作系统层面的进程与线程(对JAVA多线程和高并发有了解吗?) 计算机资源=存储资源+计算 ...

  9. 科大讯飞2019秋招研究算法笔试编程题

    第一题 样例输入 2 5 60 59 20 30 90 100 5 60 59 20 10 10 100 样例输出 1 2 Hint 对于第一组数据,将59改成60即可 AC代码: def minst ...

最新文章

  1. 盘点:近两年人工智能和机器学习领域部分收购案
  2. 未捕获ReferenceError:未定义$?
  3. 阔步向前冲,拥抱云计算-【软件和信息服务】2012.10
  4. 一图读懂|H3C SecPath ACG1050-X1应用控制网关
  5. oracle plsql update两个字段_Oracle 学习笔记(Windows 环境下安装 + PL/SQL)
  6. HTML5 — 知识总结篇《IV》【实体字符】
  7. VF 动态规划系列dp入门
  8. 机器学习实战pdf原文内容分享
  9. json文件编辑器android版,json editor手机版下载
  10. telnet 回显 linux,telnet实现本地回显
  11. 如何把图片制作做成GIF表情包?分享在线快速制作GIF图片的方法
  12. linux+pe+网络扫描,Ubuntu 18.04及其他版本Linux 下 Nmap 网络扫描工具的安装与使用
  13. ionic 下拉刷新 — ion-refresher
  14. 小学生计算机课如何上,如何上好小学信息技术课
  15. javaScript判断当前浏览器(谷歌、火狐、IE)兼容IE11
  16. 出色性能+创新设计 新华三AMD服务器
  17. 为什么被水弄湿的纸干了后会变皱?
  18. 品牌如何赋能加盟商,攻克时艰
  19. 【游戏开发环境】Unity使用Mac电脑开发,开发环境的搭建(Mac mini M1 | VSCode | Git | 好用工具)
  20. 软件平台平台物联网操作系统系列文章之-软件平台的力量

热门文章

  1. Qt LineEdit设置为不可编辑状态:
  2. 网络安全与计算机网络基础知识
  3. 电脑风扇声音大怎么办?具体原因以及解决措施,快速解决
  4. 2、正向代理和反向代理(正向代理(客户端),反向代理(服务器))
  5. [日推荐]『淘内部优惠券工具』省钱小能手
  6. Vanilla Node.js REST API示例
  7. windows服务器上无法运行bat文件,Windows 2008任务计划执行bat脚本失败返回0x1的解决方法...
  8. 为WebApi项目添加注册功能:问题与解决的思维流程
  9. Tms320c6678——多核导航模块(Multicore Navigator)
  10. 河北保定计算机学校大专分数线,河北多少分能上大专,河北大专院校最低分数线...