SDKD 软件18-顺序表

数据结构萌新,欢迎指正

判断题

选择题

编程题

题意

我们可以使用 C 语言提供的数组直接进行线性表操作,由于题目未给出明确的问题规模,我们既可以根据经验预测出问题规模,也可以根据输入动态的开出相应大小的内存
数据很水变现不出 \({O(n)}\)\({O(n^2)}\) 的区别

解法1:水题快速AC法

时间 \({O(n)}\) 空间 \({O(1)}\)

// 答案正确,2ms,436KB
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int arr[n + 1];
    for (int i = 0; i < n; i++)
        cin >> arr[i];
    int a, b;
    cin >> a >> b;
    bool flag = true;
    for (int i = 0; i < n; i++)
        if (arr[i] < a || arr[i] > b)
            {
                if(flag) flag = 0;
                else cout << " ";
                cout << arr[i];
            }
    return 0;
}

解法2:真就删除法(正道)

时间 \({O(n^2)}\) 空间 \({O(1)}\)

// 答案正确,3ms,488KB
#include <bits/stdc++.h>
using namespace std;
int len, x, y;
int main()
{
    cin >> len;
    int a[len];
    for (int i = 0; i < len; i++)
        cin >> a[i];
    cin >> x >> y;
    for (int i = 0; i < len; i++)
    {
        if (a[i] >= x && a[i] <= y)
        {
            for (int j = i; j < len - 1; j++)
                a[j] = a[j + 1];
            --len, --i;
        }
    }
    for (int i = 0; i < len; i++)
    {
        if (i != 0) cout << " ";
        cout << a[i];
    }
    cout << endl;
}
posted @ 2019-09-04 16:34  YuKi_hahaha  阅读(213)  评论(0编辑  收藏  举报