本章概述
- 算法题1
- 算法题2
- 算法题3
- 彩蛋时刻!!!
算法题1
力扣:移除元素
我们先来看这个题目的要求描述:
把与val相同数值的元素移除掉,忽略元素的相对位置变化,然后返回剩下与val值不同的元素个数。来看下它给的例子描述:
- 题解:我们可以运用顺序表删除指定数据的思路来进行解题,我们可以定义双变量,用这两个变量去遍历数组元素,然后通过移动数组元素来移除指定元素。逻辑图展示:
- 进行代码展示:
int removeElement(int* nums, int numsSize, int val) {
int src = 0;
int dst = 0;
while (src < numsSize) {
if (nums[src] == val)
src++;
else {
nums[dst] = nums[src];
src++;
dst++;
}
}
return dst;
}
结果运行图:
算法题2
力扣:删除有序数组中的重复项
我们来看下这个题目的描述:
这个数组不是严格意义上的递增数组,要求把重复的元素给删掉,而且各个元素的相对位置不变化,最后返回不重复的元素个数。来看一下它给的例子:
- 题解:大体的思路和上一个算法题类似,也是需要两个变量进行遍历数组。在这里直接给大家展示代码:
int removeDuplicates(int* nums, int numsSize) {
int src = 0;
int dst = 0;
while (src < numsSize) {
if (nums[dst] == nums[src])
src++;
else {
dst++;
nums[dst] = nums[src];
src++;
}
}
return dst + 1;
}
结果运行图:
算法题3
力扣:合并两个有序数组
我们来看一下题目的描述:
-
题解:
nums1
数组的有效数据个数为m个,nums2
数组的有效数据个数为n个。我们要把ums2
的元素插入nums1
数组里面,那么nums1
的数组大小要为m+n
,才能保证能插入进去(题目描述的nums2大小为m+n),而且插进去后,还要是增序的顺序。来看题目举得例子:- 方法1:我们先把nums2插入nums1里面,然后用冒泡排序进行nums1内部排序。
- 方法2:我们直接进行两个数组里面的元素大小比较,把大的元素放在nums1最后面,我们需要定义3个变量,l1 ,l2 和 l3。l1和l2进行比较大小,l3是用来存放较大的元素。进行逻辑图展示:
进行代码展示:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int l1=m-1;
int l2=n-1;
int l3=m+n-1;
while(l1>=0&&l2>=0)
{
if(nums1[l1]>nums2[l2])
{
nums1[l3--]=nums1[l1--];
}
else
{
nums1[l3--]=nums2[l2--];
}
}
while(l2>=0) //防止l1<0时,l2里面得元素还没,还没全放进nums1
{
nums1[l3--]=nums2[l2--];
}
}
结果运行图:
彩蛋时刻!!!
歌曲:《Call of Silence》
每章一句:人生漫长,祝你每天都快快乐乐!
感谢你能看到这里,点赞+关注+收藏+转发是对我最大的鼓励,咱们下期见!!!