1.问题解决算法:
1.双指针算法
算法的自我描述:(看代码:不要看这个,看不懂的!)
/*********************************
双指针是有两个标记的元素 来对比的方法
首先有两个 标记 的数,比喻说: i 和 j 首先 i=0 ,j =1
数组 = 1 2 2 3 3 4 4 5 (这个数组开始要有序 ,不然 不行 )
加入两个标记位的 的数组的值 对比
如果 不相同 同时 +1; 数组名【i+ 1】=数组名【j】
如果 相同 j++ ,
***************************************/
2.代码:
/*************************************************
作者:she001
时间:2022/8/21
内容: 解决 一个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。
不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外内间的冬性下款成 (O(1)这里是指的空间不变)
1.双指针算法
***************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
#include<string.h>
/*********************************
双指针是有两个标记的元素 来对比的方法
首先有两个 标记 的数,比喻说: i 和 j 首先 i=0 ,j =1
数组 = 1 2 2 3 3 4 4 5 (这个数组开始要有序 ,不然 不行 )
加入两个标记位的 的数组的值 对比
如果 不相同 同时 +1; 数组名【i+ 1】=数组名【j】
如果 相同 j++ ,
**********************************************/
int select_num(int s[],int a)//s 为数组 ,a 为数组的长度
{
int i=0;
for(int j=1;j<a ;++j)
{
if(s[i]!=s[j])
{
i++;
s[i]=s[j];
}
}
//这里可以打印 那个没有重复的所有的元素
///
for(int b=0;b<=i;++b)
{
printf("%d\t",s[b]);
}
printf("\n");
return i+1;
}
int main()
{
int s[10]={0,1,2,2,3,3,4};
int a=select_num(s,7);
printf("a=%d\n",a);
return 0;
}