c - 如何按降序打印无法创建副本的 const 未排序数组中的整数?
问题描述
例如,如果给定{3, 0, 9, 99, 1}
,我希望它是
{99, 9 ,3, 1, 0}
。我尝试创建另一个数组来存储该值,因为我每次都找到下一个最大值,但我无法实现。(新的 C 程序员)。任何帮助表示赞赏,想尝试在 O(n^2) 中解决这个问题
解决方案
与您声称的相反,我认为问题不在于实施解决方案。如果是这样,您将指定您在实施时遇到的问题。但你没有,所以我认为这是算法本身的问题。
您要求一个需要 O(1) 内存和 O(N^2) 时间的解决方案。这实际上比要求的要大。通过就地排序数组然后打印它,一个需要 O(1) 内存和 O(N log N) 时间的解决方案是可能的。
但是让我们假设您想要一个非破坏性的解决方案,这意味着不修改输入数组。以下是这样一个需要 O(1) 内存和 O(N^2) 时间的解决方案:
- 设置 max = 最大整数。
- 设置计数 = 0。
- 虽然 count 小于数组中的元素数,
- 设置下一个 = 最小整数。
- 对于数组的每个元素,
- 如果元素的值等于最大值,
- 打印元素的值。
- 递增计数。
- 别的,
- 如果元素的值大于next且小于max,
- 设置在元素值旁边
- 如果元素的值大于next且小于max,
- 如果元素的值等于最大值,
- 设置最大值 = 下一个。
在 C 中实现这些步骤中的每一个都是微不足道的。
推荐阅读
- r - 获取与引导采样的唯一值相对应的数据帧的索引
- angular - 将加载变量状态从所有其他组件传递给导航栏组件
- reactjs - 如何在 React-Native 中共享生成的二维码?
- asp.net-mvc-4 - Umbraco V7xx 将 HTML5 视频插入网页
- java - Java Spring Redis:设置使用注释的时间
- .net-core - 将 .net 核心 dll 与 .net 框架应用程序一起使用?
- onclick - 点击条件
- angular - 在 routing.module 中定义不同的路由
- html - 为什么缩小 HTML 中的 textarea 标签不安全?
- java - 从具有属性的 jar 运行 java 应用程序