2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。
你要用 所有的火柴棍 拼成一个正方形。
你 不能折断 任何一根火柴棒,但你可以把它们连在一起,而且每根火柴棒必须 使用一次 。
如果你能拼出正方形,则返回 true ,否则返回 false 。
输入: matchsticks = [1,1,2,2,2]。
输出: true。

答案2022-10-21:

状态压缩的动态规划。
力扣473。各种语言测试,rust运行速度最快,内存占用最低,golang次之,java和c#最慢并且内存占用最高。

代码用rust编写。代码如下:

use std::iter::repeat;
impl Solution {pub fn makesquare(matchsticks: Vec<i32>) -> bool {let mut matchsticks = matchsticks;let mut sum = 0;for num in matchsticks.iter() {sum += num;}if sum & 3 != 0 {return false;}let mut dp: Vec<i32> = repeat(0).take(1 << matchsticks.len()).collect();return Solution::process(&mut matchsticks, 0, 0, sum >> 2, 4, &mut dp);}fn process(arr: &mut Vec<i32>,status: i32,cur: i32,len: i32,edges: i32,dp: &mut Vec<i32>,) -> bool {if dp[status as usize] != 0 {return dp[status as usize] == 1;}let mut ans = false;if edges == 0 {ans = if status == (1 << arr.len()) - 1 {true} else {false};} else {let mut i = 0;while i < arr.len() as i32 && !ans {if ((1 << i) & status) == 0 && cur + arr[i as usize] <= len {if cur + arr[i as usize] == len {ans |= Solution::process(arr, status | (1 << i), 0, len, edges - 1, dp);} else {ans |= Solution::process(arr,status | (1 << i),cur + arr[i as usize],len,edges,dp,);}}i += 1;}}dp[status as usize] = if ans { 1 } else { -1 };return ans;}
}fn main() {let matchsticks = vec![1, 1, 2, 2, 2];let ans = Solution::makesquare(matchsticks);println!("ans = {:?}", ans);
}struct Solution {}

执行结果如下:


左神java代码

2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成一个正方形。 你 不能折断 任何一根火柴相关推荐

  1. Java黑皮书课后题第7章:7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则最小

    7.10(找出最小元素的下标)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素下标.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值的下标(多个则返回最小的下标) 题目 题目描述 ...

  2. Java黑皮书课后题第7章:7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素。编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值

    7.9(找出最小元素)使用下面的方法头编写一个方法,求出一个整数数组中的最小元素.编写测试程序,提示用户输入10个数字,调用这个方法返回最小值,并显示这个最小值 题目 题目描述与运行示例 破题 代码 ...

  3. c语言经典算法——查找一个整数数组中第二大数

    https://www.cnblogs.com/dootoo/p/4473958.html 题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大 ...

  4. 结对开发——返回一个整数数组中最大子数组的和 (首尾相接版)

    一.题目及题目要求 题目:返回一个整数数组中最大子数组的和. 要求: (1)输入一个整形数组,数组里有正数也有负数. (2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)如果 ...

  5. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  6. 返回数组个数Java_用java实现返回一个整数数组中最大数组的和

    今天研究了一下如何返回一个整数数组中最大数组的和,具体要求如下: 分析: 对于这个问题可以设定一个整型max,让他来充当子数组的和的最大值,之后就需要让他和所有的子数组进行比较,这里可以用两个for循 ...

  7. 算法--微软面试题:求一个整数数组元素间最小差值

    Q题目 有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数. A解法 方案一:最愚笨的办法--暴力穷举 利用数组中所有数据两两相减的对比来求出这个最小差值. ...

  8. 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  9. 现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

    现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数. 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数.开始时将B初始化为0 ...

最新文章

  1. 语音合成(文字转语音)工具大全
  2. pwndbg用docker实现,进行题目分析
  3. 订单生产计划表范本_生产计划管理与物料控制的实施步骤与要领
  4. 分布式搜索 Elasticsearch —— 删除索引
  5. self php语法,PHP代码审计之关于PHP_SELF的简单利用
  6. [css] css的加载会阻塞DOM树解析和渲染吗?为什么
  7. linux的用户及权限管理,用户及权限管理
  8. django-反转路径时带上参数-适用于路径中通过命名分组的形式来捕捉参数的情景
  9. hadoop生态系统学习之路(十)MR将结果输出到hbase
  10. 陀螺仪指向的是什么方向
  11. Android必知必会-使用Intent打开第三方应用及验证可用性
  12. 使用Water-Scrum-Fall交付软件
  13. MyBatis是如何自动装配的
  14. comet 简单了解
  15. redis—redis事务
  16. 计算机领域区块链是什么是意思,为什么区块链瑞普顿RXP是不可篡改的
  17. 网络安全的魔法——社会工程学
  18. 经典问题----倒水(详细解析)
  19. 随机森林(randomForest)和极限树或者叫做极端随机树(extraTree),
  20. 详解数据分析中的行为分析

热门文章

  1. 面试python的理解_面试宝典:深入理解这110道python面试题,AI和大数据向你招手,下...
  2. 图像处理常用的颜色空间
  3. 到同一家面试两次,期望薪资不一样,你怎么看?
  4. Golang匿名结构体结构体嵌套(实战使用)
  5. android 自定义表情包,快速打造 Android 自定义表情库
  6. 我的书单(持续更新)
  7. MonkeyRunner、MonkeyDevice、MonkeyImage的一些知识
  8. 周末放松,助你延长下班时间
  9. javascript是如何压缩代码的
  10. 技术类公众号分享,看到最后哟!