数据结构每日一题day7(顺序表)★★★★★

题目描述:从顺序表中删除其值在给定值s与t之间(包含s和 t,要求 s<t)的所有元素,若s或t不合理或顺序表为空,则返回 false,若执行成功则返回 true。

算法思想:

输入检查:若顺序表为空、指针为空或 s >= t,直接返回 false。

双指针覆盖法:用 k 记录保留元素的索引,i 遍历原数组。若元素不在 [s, t] 内,将其保留到 k 位置,k 递增。

更新表长:遍历结束后,表长设为 k,实现原地删除。

复杂度分析:时间复杂度O(n)空间复杂度O(1)

代码实现:

cpp 复制代码
#include <stdbool.h>
#define MAXSIZE 100  // 假设顺序表最大容量

typedef struct {
    int data[MAXSIZE];
    int length;
} SeqList;

bool DeleteBetweenSAndT(SeqList *L, int s, int t) {
    // 检查输入合法性:空指针、空表、s>=t
    if (L == NULL || L->length == 0 || s >= t) {
        return false;
    }

    int k = 0;  // 记录保留元素的索引
    for (int i = 0; i < L->length; i++) {
        // 若元素不在[s, t]内,则保留
        if (L->data[i] < s || L->data[i] > t) {
            L->data[k++] = L->data[i];
        }
    }

    L->length = k;  // 更新表长为保留元素的数量
    return true;
}
相关推荐
csdn_aspnet17 小时前
C++ 算法 LeetCode 编号 70 - 爬楼梯
开发语言·c++·算法·leetcode
he___H17 小时前
leetcode100-合并区间
java·数据结构·算法
wuweijianlove17 小时前
算法性能优化中的数据流重构与依赖消解的技术6
算法
Agent手记17 小时前
智能财务对账Agent如何设计?2026金融大模型Agent架构设计与实战指引
人工智能·算法·ai·金融
计算机安禾17 小时前
【算法分析与设计】第5篇:最大子数组问题:分治与线性扫描的对比分析
算法
z2005093017 小时前
今日算法(组合问题)(回溯解法)
算法·深度优先
Shiy_17 小时前
用 TypeScript 验证三门问题:为什么换门胜率是 2/3?
算法·typescript
Yunzenn18 小时前
深度解析字节最新研究-Cola DLM 第 06 章:分块因果 DiT 先验 —— 在隐空间里做 Flow Matching
人工智能·算法·架构
HjhIron18 小时前
数组去重:从零开始,写一个靠谱的工具函数
算法·面试
阿黎梨梨18 小时前
#动态规划入门:从“爬楼梯”问题理解核心思想
算法