arrays - 排列一个整数数组,使得没有两个连续数字的总和可以被 3 整除
问题描述
我的一个朋友在一个公司的在线评估中遇到了这个问题,并问了我这个问题。
给定一个整数数组,我们必须(可能)排列数组,使得没有两个连续数字的总和可以被 3 整除。
数组的大小
n<=10^5
。如果没有这样的安排是可能的,那么我们必须返回
Not Possible
。
我可以考虑贪婪地填充整数,这样连续元素的总和如果不能被 3 整除,就会给出一个O(n^2)
解决方案(但我不确定贪婪地填充元素是否会在这里给出解决方案)或者我可以考虑DFS
通过查看来做一个(蛮力)所有可能的安排,但这将是一个指数时间解决方案,并且对于给定的数组大小条件肯定不会在这里工作。
有没有可能O(nlogn)
的O(n)
解决方案?
解决方案
是的,存在 O(n) 解决方案:
- 首先将所有元素分成3个桶,元素
x
将属于桶x mod 3
- 现在我们可以使用贪心策略:注意桶中的元素
1
和2
不能是邻居,桶中的元素0
和0
- 我们可以将桶中
1
的所有元素放入答案中,然后是桶中的一个元素和桶中0
的所有元素2
- 现在剩下的就是桶
0
中的一些元素,我们可以将它们放在桶的1
两个元素或桶中的两个元素之间2
- 当然有一些极端情况是不可能解决的
推荐阅读
- c# - 在 linq 的帮助下删除 foreach 循环
- android - 项目尚未在 Google Play 开发者控制台中链接,当我调用 Google Developer API 时出现错误
- office365 - Aspose.PDF 与 Microsoft 365 和 Sharepoint 的集成
- python - (到达当前页面的末尾,获取下一页......,#解析响应有效负载)Twitter错误响应:状态代码= 400
- php - Docker:PHP、Apache 和 MySQL 在同一个容器/同一个 Dockerfile
- google-pagespeed - 使用 webp 图片后,google pagespeed insight 仍然显示“以下一代格式提供图片”
- meteor - Meteor - 我如何在服务器端看到 console.log?
- android - 如何在 Expo 中从 WebBrowser 重定向到应用程序
- amazon-redshift - 使用 sqlalchemy 和 pandas 的 redshift 连接错误太多
- python - 将文本转换为 AP(美联社)样式