第16周 oj题目(逆序输出数组)

本文介绍了一个C++程序,该程序通过指针操作实现数组元素的逆序输出。具体包括从键盘接收用户输入的整数,并将这些整数存入数组中,随后利用指针交换数组元素来达到逆序的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




/* 
 * Copyright (c) 2014, 烟台大学计算机学院 
 * All rights reserved. 
 * 文件名称:test.cpp 
 * 作    者:呼亚萍 
 * 完成日期:2014年 12 月 10日 
 * 版 本 号:v1.0 
 * 
 * 问题描述:采用指针访问的方式,从键盘给数组a[N]输入n个数据(n小于100),然后对元素值按逆序存放后输出。
 * 输入描述:相应的程序
 * 程序输出:连接后的结果
 */ 
#include <iostream>
using namespace std;
const int N=100;
int main()
{
    int a[N],*p,*q,n;
    cin>>n;
    for(p=a; p<a+n; p++)
        cin>>*p;
    p=a;
    q=a+n-1;
    while(p<q)
    {
        int r=*p;
        *p=*q;
        *q=r;
        *p++;
        *q--;
    }
    for(p=a; p<a+n; p++)
        cout<<*p<<' ';
    cout<<endl;
}


运算结果:

知识点总结:

数组与指针的结合使用,反向输出数组,用*p++与*j ++实现

学习心得:

反向输出数组的学习,加油!


### 数组合并算法解决方案 在处理数组合并问题时,通常涉及将两个已排序的数组合并为一个新的有序数组。这种操作可以通过双指针技术实现,从而达到线性时间复杂度 \(O(m+n)\),其中 \(m\) 和 \(n\) 是输入数组的长度。 以下是基于此思路的具体实现: #### 合并两个有序数组的核心逻辑 通过维护两个指针分别指向两个数组的起始位置,逐一比较当前两指针所指向的元素大小,并将较小者放入目标数组中[^1]。当其中一个数组被完全遍历后,直接将另一个数组剩余部分复制到目标数组即可[^2]。 ```python def merge_sorted_arrays(nums1, m, nums2, n): """ 将nums2中的元素合并至nums1,使得nums1保持有序状态。 :param nums1: List[int], 初始大数组,包含有效元素和填充空间 :param m: int, nums1的有效元素数量 :param nums2: List[int], 待合并的小数组 :param n: int, nums2的有效元素数量 :return: None (原地修改) """ p1, p2 = m - 1, n - 1 # 初始化两个指针 tail = m + n - 1 # 结果数组的最后一个索引 while p1 >= 0 and p2 >= 0: if nums1[p1] > nums2[p2]: nums1[tail] = nums1[p1] p1 -= 1 else: nums1[tail] = nums2[p2] p2 -= 1 tail -= 1 # 如果nums2还有剩余,则将其全部拷贝过来;如果nums1有剩余则无需操作 if p2 >= 0: nums1[:p2 + 1] = nums2[:p2 + 1] # 测试代码 nums1 = [1, 2, 3, 0, 0, 0] m = 3 nums2 = [2, 5, 6] n = 3 merge_sorted_arrays(nums1, m, nums2, n) print(nums1) # 输出应为 [1, 2, 2, 3, 5, 6] ``` 上述方法利用逆向双指针策略,在不借助额外存储的情况下完成合并过程,满足题目对时间和空间效率的要求[^5]。 --- #### 关键点解析 - **时间复杂度**: 整体运行时间为 \(O(m+n)\),因为每个元素仅访问一次。 - **空间复杂度**: 原地调整 `nums1` 的内容,未引入新的辅助数组,故空间复杂度为 \(O(1)\)[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值