| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构之顺序表习题讲解 -> 正文阅读 |
|
[数据结构与算法]数据结构之顺序表习题讲解 |
补充知识点: realloc在扩展的空间比原来的空间要小会进行缩容,原地缩容或者异地缩容。 顺序表的头删中,删除数据时缩容是时间换空间,不缩容是空间换时间。 题一: 给你一个数组 nums?和一个值 val,你需要 原地 移除所有数值等于?val?的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 要求:时间复杂度为O(N) 空间复杂度为O(1) 示例: 输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解法一:遍历整个数组,遇到val挪动后部分数组并且删除数组长度 时间复杂度O(N^2) 解法二:创建额外的空间存放数组,空间换时间 时间复杂度:O(N)? 空间复杂度:O(N) ? ? ? 解法三:双指针再优化 时间复杂度:O(N)? 空间复杂度:O(1) ? 题二: 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么?nums?的前 k 个元素应该保存最终结果。 将最终结果插入?nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例: 输入:nums = [0,0,1,1,1,2,2,3,3,4] 输出:5, nums = [0,1,2,3,4] 解法:同上道题,采用双指针进行大大地优化 ? 题三: 给你两个按 非递减顺序 排列的整数数组?nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 要求:时间复杂度:O(m+n) 解法一:创建额外空间,空间换取时间 ? ? 解法二:三个指针,进行深度优化 ? ? 对于生活中会出现的未知情况,会感到害怕、迷茫,会假想一些糟糕情况而感到难过。😔 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:31:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |