我们如何以恒定复杂度或 O(1) 交换 2 个数组?

2024-01-14

我们如何以恒定的复杂度交换 2 个数组或O(1)?我们有办法做到这一点吗?我尝试过使用指针,但出现错误

此外,这不会有帮助,因为它只是交换指针而不是数组:

#include <algorithm>
int AA[100], *A=AA, BB[100], *B=BB;
swap(A, B);

我也尝试过使用向量赋值运算符,但它们具有线性复杂性,即O(N)不是恒定的。那么,有什么办法可以交换两个数组吗?O(1)? (通过使用指针或其他东西)

我尝试在互联网上搜索并找到了 codeforces 的链接(http://codeforces.com/blog/entry/11971 http://codeforces.com/blog/entry/11971)但这没有帮助。


Using std::swap(使用成员函数 swap)对于向量(std::vector)的复杂度为O(1).

来自 C++ 标准:

void swap(vector& x);

10 效果:将*this 的内容和capacity() 与x 的内容和capacity() 交换。

11 复杂性:恒定时间.

如果使用运算符动态分配数组,则可以在恒定时间内“交换数组”new。在这种情况下,您确实只能交换指向数组第一个元素的指针。

例如:

#include <iostream>
#include <algorithm>

int main() {
    int **a = new int *[2];
    a[0] = new int[5] { 0, 1, 2, 3, 4 };
    a[1] = new int[5] { 5, 6, 7, 8, 9 };
    
    for ( size_t i = 0; i < 2; i++ ) {
        for ( size_t j = 0; j < 5; j++ ) {
            std::cout << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }
    
    std::cout << std::endl;
    
    std::swap( a[0], a[1] );    

    for ( size_t i = 0; i < 2; i++ ) {
        for ( size_t j = 0; j < 5; j++ ) {
            std::cout << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }
    
    std::cout << std::endl;
    
    delete [] a[0];
    delete [] a[1];
    delete [] a;
    
    return 0;
}

输出是:

0 1 2 3 4 
5 6 7 8 9 

5 6 7 8 9 
0 1 2 3 4 

事实上,同样的操作是在std::vector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何以恒定复杂度或 O(1) 交换 2 个数组? 的相关文章

随机推荐

  • 使用 Parallel.For 和 EPPlus 创建 Excel 工作表

    我正在使用EPPlus http epplus codeplex com 库来创建包含许多工作表的 Excel 工作簿 我想知道并行构建工作表是否安全 如果库支持这种行为 我在 有限的 文档中找不到提及 package new ExcelP
  • 在 Visual Studio 2013 中的托管单元测试上使用混合模式调试

    我在 Visual Studio 2013 测试框架中有一个 C 单元测试 它练习 CLI 和本机代码 我想在执行 C 单元测试时研究代码的本机部分 但是 运行 测试 gt 调试 gt 所有测试 会运行托管调试器 因此不会命中本机代码中的断
  • 不同内核的线程如何访问同一全局内存地址?

    如果一个线程束中的许多线程想要读取全局内存中的某个地址 那么该数据就会被广播 对吗 如果 warp 中的许多线程想要写入全局内存中的某个地址 则存在序列化 但无法预测顺序 对吗 但是 第一个问题 如果不同扭曲 不同块中的许多线程想要写入全局
  • 设置要在 PowerShell 导出 csv 中使用的日期格式?

    我正在尝试将数据库表导出为文本 CSV ish 以供以后批量插入 采用 ISO 格式 yyyy mm dd 的日期会少很多麻烦 我相信 我最终说服了 SQL Server Express 在导入时采用英式格式 尽管无论我做什么 灰色的服务器
  • GitHub Copilot 命令不起作用并显示错误

    我安装 GitHub Copilot 只是为了测试 但是 这些命令都不起作用 例如 如果我尝试按 CTRL Enter 则会收到以下错误消息 未找到命令 github copilot generate 我正在尝试使用 JS 文件 我安装了最
  • c# HttpWebRequest 不向代理服务器发送默认凭据

    我正在使用鱿鱼代理服务器在将请求传递到公共网络之前对客户端进行身份验证 我还没设置HttpWebRequest Proxy对象 因此我假设 Web 请求将采用默认窗口凭据并传递到代理服务器 我也已将用户条目添加到鱿鱼代理 但在发出请求时出现
  • 使用 UCWA API 进行聊天机器人?

    UCWA 能否用于 Skype For Business 本地服务器上的企业聊天机器人应用程序 我找不到太多与此相关的文档 使用 UCWA 实现聊天机器人绝对是可能的 但您必须经历一些挑战 这主要是为了让 UCWA 模拟的 App 始终在线
  • jQuery 手风琴展开所有 div

    当页面加载或事件发生时是否可以展开所有组件 谢谢 只需使用这个 accordion ui accordion content show
  • Base 64 编码有何用途?

    我时常听到人们谈论 base 64 编码 它是干什么用的 当您想要通过网络传输一些二进制数据时 通常不会仅通过以原始格式在网络上传输位和字节来实现 为什么 因为有些媒体是为流文本而设计的 你永远不知道 某些协议可能会将你的二进制数据解释为控
  • Vue 组件和 AJAX 加载 HTML 内容

    我有一个 Vue 组件 它基本上是复杂 HTML 标记的简写 初始加载时 一切正常 我正在使用 AJAX 将更多这些组件加载到页面上 问题是该组件在使用 AJAX 加载后 不想编译成 HTML 我只得到未渲染的 Vue 组件 如下所示
  • 在 asp.net webform 应用程序中选择启用 ajax 的 WCF 服务时有哪些优点和缺点?

    我刚刚经历了我的第一次ajax enabled WCF service在样本中asp net webform应用程序 如果我的网络应用程序中有 10 15 个页面 其中涉及add edit view and delete操作 是否有可能使它
  • UIPickerView 导致崩溃

    每当我尝试在应用程序中选择 UIPickerView 时 它就会崩溃 我已经实现了所有委托方法 但收到此错误 2013 01 15 13 57 56 176 tracker 16142 c07 Assertion failure in UI
  • 我应该如何编辑查询以提高性能,同时保留现有结构?

    我想提高查询的性能 如下所示 里面有一个索引isl ref and isl date字段 但由于我使用 gt 运算符并且使用 因此无法使用索引 1 1440 增加一分钟isl date场地 我应该如何编辑查询以提高性能 同时保留现有结构 S
  • 如何在 Eclipse LogCat 查看器中过滤掉标记名

    我有一个 Android 应用程序会 发送垃圾邮件 LogCat 我想删除它的 logcat 条目以使输出更具可读性 是否可以有一个过滤器来删除特定标记名称的 LogCat 条目 或者一种有效的搜索模式 是的 创建一个过滤器 其中 按日志标
  • Terraform /AWS aws_servicecatalog_portfolio

    我正在尝试通过 Terraform 部署服务目录 当我尝试通过代码部署服务目录产品时 Service catalog product resource aws servicecatalog product linuxDesktop name
  • ExtJS 7.3 中没有可用的 ext-locale 包

    由于某些奇怪的原因 我收到此错误 无法满足 ext locale 的要求 错误 以下内容 版本无法满足 ERR 应用程序 ext locale 否 匹配 ERR 无法解决包要求 根据官方说明 我将需求添加到了 app json classi
  • 如何通过 printf 打印二进制数[重复]

    这个问题在这里已经有答案了 可能的重复 有 printf 转换器可以以二进制格式打印吗 https stackoverflow com questions 111928 is there a printf converter to prin
  • 使用 Robospice 和 Retrofit 将图像上传到 Google appengine

    我正在尝试使用 Robospice 和 Retrofit 将图像上传到我的 Google appengine blobstore 我可以获取 GAE 提供的上传 URL 但是当我尝试将带有图像的 URL 作为 Multipart POST
  • 在 Uvicorn 中与多个工作线程一起使用多重处理(线程锁)

    我正在使用通过 uvicorn 提供的 FastAPI 构建一个 API 该 API 具有使用 python 多处理库的端点 端点为 CPU 密集型任务生成多个进程以并行执行它们 以下是高级代码逻辑概述 import multiproces
  • 我们如何以恒定复杂度或 O(1) 交换 2 个数组?

    我们如何以恒定的复杂度交换 2 个数组或O 1 我们有办法做到这一点吗 我尝试过使用指针 但出现错误 此外 这不会有帮助 因为它只是交换指针而不是数组 include