您的位置:首页 > 房产 > 家装 > bootstrap网页设计_深圳建设项目信息网_网站排名优化+o+m_搜索引擎优化教材答案

bootstrap网页设计_深圳建设项目信息网_网站排名优化+o+m_搜索引擎优化教材答案

2025/3/9 23:40:03 来源:https://blog.csdn.net/2401_87711435/article/details/145930863  浏览:    关键词:bootstrap网页设计_深圳建设项目信息网_网站排名优化+o+m_搜索引擎优化教材答案
bootstrap网页设计_深圳建设项目信息网_网站排名优化+o+m_搜索引擎优化教材答案

本节我们将对顺序表相关数组题进行详细分析

下面就开始叭!🎈🎈🎈
在这里插入图片描述

1.移除元素

题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
要求:不要使用额外的数组空间,你必须仅使用 O(1)额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。

画图分析:
在这里插入图片描述

代码运行:

void Swap(int* p1, int* p2) {int tmp = *p1;*p1 = *p2;*p2 = tmp;
}int main() {int arr[] = { 1, 3, 4, 3, 5, 3 };int sz = sizeof(arr) / sizeof(arr[0]);//要删除的元素int k = 3;// 双指针法:将非3元素前移//目标指针int* dst = arr;//遍历数组指针int* src = arr;for (src; src < arr + sz; src++){if (*src != k) {//将src指向的元素复制到dst上*dst = *src;dst++;}}// 计算剩余元素数量int remain = dst - arr;// 打印结果for (int i = 0; i < remain; i++) {printf("%d ", arr[i]);}return 0;
}

运行结果:

在这里插入图片描述

2…删除有序数组中的重复项

题目:
输入: nums = [0,0,1,1,1,2,2,3,3,4]
输出: 5,nums = [0,1,2,3,4]
解释: 函数应该返回新的长度5,并且原数组 nums 的前五个元素被修改为0,1,2,3,4。不需要考虑数组中超出新长度后面的元素。

画图分析:
在这里插入图片描述
代码运行:

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}
int main()
{int arr[] = { 0,0,1,1,2,2,3,3,4 };int sz = sizeof(arr) / sizeof(arr[0]);//开始指针int* sta = arr;//遍历指针int* dst = arr;//末尾指针int* end = arr + sz;//指向数组后面这个元素int num = 0;//用于记录去重后数组中元素的个数(不包括第一个元素),初始值为 0while (dst < end){if (*sta == *dst){dst++;}else{sta++;//注意这里要先挪再交换Swap(dst, sta);//交换dst++;num++;//?}}int i = 0;for (i = 0; i <= num; i++){printf("%d ", arr[i]);}return 0;
}

注意num的使用技巧:
在这段代码中,num 变量的主要作用是记录去重后数组中除第一个元素之外的元素个数。由于原数组是有序的,第一个元素必然会被保留在去重后的数组中,所以num0开始计数,每发现一个与前面元素不同的新元素,num 的值就加 1。最终,num + 1 就代表了去重后数组的元素总数。
dst指针遍历完整个数组后,循环结束。此时 num 的值表示去重后数组中除第一个元素外的元素个数。 对于数组 {0, 0, 1, 1, 2, 2, 3, 3, 4},去重后的数组为 {0, 1, 2, 3, 4},num 的最终值为 4,代表除第一个元素 0 外,还有 4 个不同的元素。

运行结果:
在这里插入图片描述

3.归并数组

题目: 给你两个按非递减顺序排列的整数数组 nums1nums2 ,另有两个整数m n分别表示 nums1 nums2中的元素数目。请你合并nums2nums1 中,使合并后的数组同样按非递减顺序排列。
注意: 最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况, numsl 的初始长度为 m+n,其中前 m个元素表示应合并的元素,后 n个元素为0,应忽略。nums2 的长度为 n

题目解析:
在这里插入图片描述

画图解析:

在这里插入图片描述

代码运行:

int main()
{int arr_1[10] = { 0,1,2,3,6 };int arr_2[5] = { 1,1,3,4,5 };int end_1 = 4;int end_2 = 4;int end = sizeof(arr_1) / sizeof(arr_1[0]) - 1;//两个数组end下标都>=0表示没有走完while (end_1 >= 0 && end_2 >= 0){//如果第一个数组元素大于等于第二个,那么先放第一个if (arr_1[end_1] >= arr_2[end_2]){//这里是先将end_1的值赋值到end 然后再--arr_1[end--] = arr_1[end_1--];//注意这里先赋值再减减}else{arr_1[end--] = arr_2[end_2--];}}//数组一:end_1走完了,直接将end_2压入到前面while (end_2 >= 0){arr_1[end--] = arr_2[end_2--];}//数组二:end_2走完了,那么就不需要考虑end_1,因为2压到后面,1是有序的直接排好了//遍历打印int i = 0;for (i = 0; i < sizeof(arr_1) / sizeof(arr_1[0]); i++){printf("%d ", arr_1[i]);}return 0;
}

运行结果:

在这里插入图片描述
🎉🎉🎉
在这里本章就完结啦~
我们下期见噢~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com