广州手机网站建设哪家好,搬瓦工一键WordPress,toxue外贸网,网站架构布局原地删除数据 我们的思路这里给的是双指针#xff0c;给两个指针#xff0c;从前往后移动#xff0c;如果不是val就覆盖#xff0c;如果是我就跳过#xff0c;大家一定要看到我们的条件是原地修改#xff0c;所以我们不能另开一个数组来实现我们这道题目。 这里我们给两… 原地删除数据 我们的思路这里给的是双指针给两个指针从前往后移动如果不是val就覆盖如果是我就跳过大家一定要看到我们的条件是原地修改所以我们不能另开一个数组来实现我们这道题目。 这里我们给两个数组一个是dst一个就是我们的src我们让src往后移动遇到val就如果不是val我们就覆盖大家也看到我们今天的主题是顺序表说明我们的题目内容也最好和顺序表有点关系顺序表的本质就是数组所以我们这里还是用数组下标来访问可能更好当然指针肯定也能实现。
int removeElement(int* nums, int numsSize, int val){int dst 0;int src 0;while(src numsSize){if(nums[src] ! val){nums[dst] nums[src];}else{src;}}return dst;
}这样我们的代码就能通过这里我们还需要做的就是返回这个数组的有效数据这里我建议大家自己举例子来说明我的想法是我们每次覆盖之后dst都会所以dst指向的位置应该是有效位置的后一个因为我们的数组下标是从0开始的所以还是dst但是dst指向的是有效数据的后一位。
删除有效的数据的重复项
int removeDuplicates(int* nums, int numsSize){int dst 0;int src 0;while(src numsSize){if(nums[dst] ! nums[src]){nums[dst] nums[src];}else{src;}}return dst1;
}其实这里还是双指针的思路如果相同我们就src不同的话我们先让dst然后再进行覆盖 其实大家自己去移动控制就可以算出来了这里大家也可以让src从1开始从1开始的话可能好比较一点但是我们的思路是大差不差。
合并有序数组 首先我们看题目可以想出两种做题的思路第一种就是我们可以重新开辟一个空间然后我们还是继续用双指针的办法给两个指针指向我们nums1和nums2开始的地方然后比较小谁小谁先放入一个到尾巴就结束然后把剩下的放进去就可以了但是我们这里看到数组1的空间其实足够大那我们就不用考虑这么多我们可以再nums1中进行操作。 我们比较谁大就放到后面去然后有一个end变成0就得结束了要不然会越界。 void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int end1 m - 1;int end2 n - 1;int tail m n -1;while(end1 0 end2 0){if(nums1[end1] nums2[end2]){nums1[tail--] nums1[end1--];}else{nums1[tail--] nums2[end2--];}}while(end2 0){nums1[tail--] nums2[end2--];}
}10月底了学校课真的好多想旷课但是要点名真的好烦进度慢了好多了这个月再加上手骨裂了敲代码慢很多唉。