寒武纪算法开发岗位二面手撕代码题目记录

题目:

给定一个数组,求能组成的和中,最小不可能的和。
例如:[1,2,3,5],最小不可能的和为12。

解答:

就是一个二维动态规划,下面的答案是我面试完下来自己又重新做的,当时没做出来。

主要就是一个二维dp table,然后dp[i][j]表示数组中前i个数,组成和为j是否可能出现。

填表规则:

data为所给数组。
dp[i][j] 有三个来源决定:

  1. 上一行当前列的值;
  2. 上一行从当前列往前推data[i],例如,这里第二行data[i]=2;则就是是看dp[i-1][j-data[i]]。
  3. 本身dp[i][j].

则得到状态转移方程为:
当data[i] > j时:
dp[i][j] = dp[i-1][j] || dp[i-1][j-data[i]] || dp[i][j]
当j >= data[i] 时:(仅仅考虑上一行当前列的数)
dp[i][j] = dp[i-1][j] || dp[i]

初始化:
列数由数组内所有数之和决定,cols = sum,创建数组的时候多留出一个0.所以第二维维sum+1.
行数就是数组的长度。

1 2 3 4 5 6 7 8 9 10 11
1 1 0 0 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0 0 0
3 0 0 1 0 0 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0

填表:填写第二行

1 2 3 4 5 6 7 8 9 10 11
1 1 0 0 0 0 0 0 0 0 0 0
2 1 1 1 0 0 0 0 0 0 0 0
3 0 0 1 0 0 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0

填表:填写第二行
这里你可能会疑惑,第三行第6列这里为什么会填1呢?它是由第2行第(6-3)列得来的。
!!注意这里由于是看当前行之前的数,所以不会出现两个相同数相加的情况,比如第2行第3列,这个3是由1+2得到的,而不是直接是3.

1 2 3 4 5 6 7 8 9 10 11
2 1 1 1 0 0 0 0 0 0 0 0
3 1 1 1 1 1 1 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0 0

填表:填写第三行

1 2 3 4 5 6 7 8 9 10 11
1 1 0 0 0 0 0 0 0 0 0 0
2 1 1 1 0 0 0 0 0 0 0 0
3 1 1 1 1 1 1 0 0 0 0 0
5 1 1 1 1 1 1 1 1 1 1 1

代码:

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;/*
该代码是寒武纪的二面面试题:
题目:
给定一个数组,求能组成的和中,最小不可能的和。
例如:[1,2,3,5],最小不可能的和为12。
*/int minNoSum(vector<int>& data) {int n = data.size();if (n == 0) return 0;if (n == 1) return 1;int minv = INT_MAX;int sum = 0;sort(data.begin(), data.end());for (int i = 0; i < n; ++i) {if (data[i] < minv) minv = data[i];sum += data[i];}// dp[i][j]表示前i个数,和为j是否能取到vector<vector<bool>> dp(n, vector<bool>(sum+1, 0));for (int i = 0; i < n; ++i) {int num = data[i];dp[i][num] = 1;}for (int i = 1; i < n; ++i) {for (int j = 1; j <= sum; ++j) {if (j >= data[i]) {dp[i][j] = dp[i-1][j] || dp[i-1][j-data[i]] || dp[i][j];}else {dp[i][j] = dp[i - 1][j] || dp[i][j];}}}for (int i = 1; i < sum; ++i) {if (!dp[n - 1][i]) return i;}return sum + 1;
}int main()
{vector<int> data = {1,2,3,5};int res = minNoSum(data);cout << res << endl;system("pause");return 0;
}

寒武纪算法开发岗位二面手撕代码题目详细记录相关推荐

  1. 2021年oppo哲库数字IC岗位手撕代码真题(含:握手信号、自动售卖机、序列发生器、根据RTL写verilog)

    大家好,最近汇总了2021年oppo哲库招聘手撕代码题目,本文章一共含有以下几个题目: 一,使用握手信号实现跨时钟域数据传输(verilog) 二,自动售卖机(verilog) 三,序列发生器(ver ...

  2. 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...

  3. 【数字IC手撕代码】Verilog固定优先级仲裁器|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  4. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  5. 【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  6. 【数字IC手撕代码】Verilog自动售卖饮料机|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  7. 【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  8. Interview:算法岗位面试—11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码、项目考察、比赛考察、图像算法的考察等

    Interview:算法岗位面试-11.06早上上海某智能驾驶科技公司(创业)笔试+面试之手撕代码.项目考察.比赛考察.图像算法的考察等 导读:该公司是在同济某次大型招聘会上投的,当时和HR聊了半个多 ...

  9. 算法手撕代码46~50

    深度学习/机器视觉/数字IC/FPGA/算法手撕代码目录总汇 目录 1.二叉搜索树的第k个节点 2.两个栈实现队列 3.青蛙跳台阶

最新文章

  1. identifier of an instance of was altered from to n
  2. MobIM仅为开发者提供即时通讯的消息通道服务
  3. mpvue 从零开始 女友的来电 4 flyio
  4. tomcat原理解析(一):一个简单的实现
  5. LeetCode 1742. 盒子中小球的最大数量
  6. 嵌入式基础(1)---硬件知识,搞嵌入式开发必备
  7. [转]setTimeout() 函数未定义错误
  8. python 以行为单位进行字符串的切割
  9. 读取jar中资源文件的问题
  10. 药品计算机培训计划,_计算机培训学习计划范文
  11. 提高自己社会竞争力的书籍
  12. yapi接口管理工具
  13. 洛谷 【入门1】顺序结构 P5708 【深基2.习2】三角形面积
  14. 说说在JAVA中使用Redis,以及Redis分布锁
  15. 计算机加减乘除的公式,Word表格函数公式,轻松搞定加减乘除
  16. JS逆向基础知识个人总结
  17. 为什么博图中放置按下按钮无反应_为什么点击了没反应,每个按钮都是
  18. 信奥中的数学 组合篇 相关资料汇总(2022.07.08)
  19. R语言机器学习之caret包详解(一)
  20. 不同种类的单片机通讯分析

热门文章

  1. Python实现三维高斯函数图像显示
  2. 水壶 - NOI Online 3
  3. 结构体占用内存的计算
  4. 企业为什么要做高新认证?国家高新技术企业认定的6大好处!
  5. arcgis engine中的“System.Runtime.InteropServices.COMException”类型的第一次机会异常在...发生
  6. 艾永亮:把“卖酱油”做到极致,海天味业到底是怎么做到的?
  7. php网站分站功能,使用Wordpress的多站点功能、设置分站 | 某某人的记事本
  8. 陈海波:道里可信结构在云计算服务隐私安全保障方面的应用
  9. 换算一下 - 技术服务支持
  10. java断点_Java 断点调试总结