如何撰写一篇吸引徐州CMS建站用户注意的华为手机软文?
摘要:徐州cms建站,华为手机软文范文300,北京网络公司注册,做网站该注意哪些基本要素目录 前言 题目一:删除有序数组中的重复项 思路: 题解: 题目二&
徐州cms建站,华为手机软文范文300,北京网络公司注册,做网站该注意哪些基本要素目录 前言 题目一#xff1a;删除有序数组中的重复项 思路#xff1a; 题解#xff1a; 题目二#xff1a;合并两个有序数组 思路#xff1a; 分析#xff1a; 题解#xff1a; 题目三#xff1a;反转链表 思路#xff1a; 分析#xff1a; 题解#xff1a; 题目四删除有序数组中的重复项 思路 题解 题目二合并两个有序数组 思路 分析 题解 题目三反转链表 思路 分析 题解 题目四移除链表元素 思路一 分析 题解 思路二 分析 题解 总结 前言 无论是面试准备还是日常编码实践解决与顺序表和链表相关的算法问题都是不可避免的挑战本篇文章旨在帮助你巩固和提升这两个重要数据结构的理解和应用能力。 题目一删除有序数组中的重复项 题目描述 示例与提示 思路 题目中的数组是一个升序的数组依据这个点我们可以知道相同的元素都是紧挨着的那要想保持升序后一个元素一定比不等于当前元素且比当前元素大。和前边删除元素的思路类似。
题解
int removeDuplicates(int* nums, int numsSize){
int pos0;int src0;while(srcnumsSize-1){if(nums[src]!nums[src1]){nums[pos]nums[src];}elsesrc;}nums[pos]nums[src];//为了防止数组越界访问导致最后一个元素没有进行赋值最后在这里补上return pos;
} 题目二合并两个有序数组 题目描述 示例与提示 合并两个有序数组的思想叫做归并这种思路在后续的学习中也会经常遇到。有的同学可能会有这样的思路将两个元素合并然后qsort排序一下这样暴力求解。这样解题也可以但我们学习了空间复杂度和时间复杂度就要考虑到复杂度问题以写出好的程序。 思路 注意题目中给的是非递减排列的整数数组举个例子13457。这样的数组属于递增数组1233356。这样的数组属于非递减数组。 了解清楚题意后我们介绍一下解题思路我们可以依次比较两数组中的元素然后把小的尾插到新数组这个就是归并的思想。但是这道题目有点不一样它的第一个数组会很大是两个数组有效数据个数的和这里就要求我们把数据归并到第一个数组。
那这道题应该怎么解决呢 前边介绍的归并思想我们是正着比较然后尾插那这道题我们是不是可以倒着比较然后尾插到第一个数组。 分析 理解了解题的思路后我们在进行更深一步的分析由于力扣的题目大都是接口型题目在调试时会很麻烦这就是我们刷不动题的原因之一做好全面的分析才能更高效的解决问题。 情况一 从末尾开始依次比较较大的数字插入到数组一的末尾 依次比较并进行插入。 情况二 两个数组依然是末尾数据进行比较然后尾插到数组一但是这次不同的是数组一遍历完后还并没有结束此时的数据如下 这里就需要再将数组二剩下的数据继续插入到数组一当中。 题解
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int end1m-1;
int end2n-1;
int endmn-1;while(end10 end20){if(nums1[end1] nums2[end2]){nums1[end--]nums1[end1--];}else{nums1[end--]nums2[end2--];}}while(end2 0){nums1[end--] nums2[end2--];}
} 使用3个变量依次存储第一个数组的有效数据的末尾第二个数组的末尾以及第一个数组的末尾。谁大就把他插入到nums1的末尾最后如果第二个数组没有遍历完就将剩余数据依次插入到nums1中。
题目三反转链表 题目描述 思路 数组的反转很简单最后一个元素和第一个元素交换然后一个往前一个往后循环遍历但这个是单链表没法向前遍历。那要怎么解决呢我们可以这样做遍历这个链表将每个节点依次改为指向前一个节点但要确保后续节点不丢失。这里我们就可以创建3个结构体指针一个指向NULL一个指向第一个节点最后指向第二个节点以便于记录链表后续节点。
分析 假设初始是这样的一个链表 创建3跟结构体指针改变节点指向后向后遍历 有人疑惑链表不是不可以向前遍历吗那n1怎么到n2的位置我们可以直接把n2赋值给n1然后把n3赋值给n2n3通过指针继续向后遍历。 当n2为NULL时就结束。
