编写函数,该函数的功能是:删除以为数组中所有相同的数,只保留一个;数组中的数已按从小到大排序,函数返回值为删除后数组中的数据个数。在主函数中调用该函数。
时间: 2023-03-19 21:26:43 浏览: 71
可以使用双指针的方法,一个指针指向当前不重复的数,另一个指针遍历整个数组,如果遇到与当前不重复的数不同的数,则将其放到当前不重复的数的后面,并将当前不重复的数指针后移一位。
具体实现如下:
```python
def remove_duplicates(nums):
if not nums:
return 0
i = 0
for j in range(1, len(nums)):
if nums[j] != nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
```
在主函数中调用该函数即可:
```python
nums = [1, 1, 2, 2, 3, 4, 4, 5]
n = remove_duplicates(nums)
print(nums[:n]) # 输出 [1, 2, 3, 4, 5]
print(n) # 输出 5
```
相关问题
用c语言编写函数fun,函数的功能是:删去一组数组中所有相同的数,使之只剩一个。数组中的数已按从小到大的顺序排列,函数返回删除后数组的个数
### 回答1:
好的,这个问题可以回答。以下是C语言函数fun的代码实现:
```c
int fun(int arr[], int n) {
int i, j;
if (n == 0) {
return 0;
}
j = 0;
for (i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i];
}
}
return j + 1;
}
```
该函数通过遍历数组,判断当前元素与前一个元素是否相同,如果不同就将其保留下来,否则就跳过。最后返回保留下来的元素个数(也就是删除后的数组个数)。
### 回答2:
函数fun的实现如下所示:
```c
int fun(int arr[], int n)
{
if (n <= 1) {
return n;
}
int i, j;
j = 0; // 新数组的下标
for (i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i]; // 将不相同的数存入新数组
}
}
return j + 1; // 返回新数组的长度
}
```
函数接受一个已按从小到大顺序排列的整数数组arr,以及数组的长度n。函数的目标是将数组中所有重复的数删除,只保留一个,并返回删除后数组的长度。
函数中使用了两个指针:i用于遍历原数组arr,j用于记录新数组的下标。初始时,j指向新数组的第一个位置。
从原数组的第二个数开始遍历,如果当前数与上一个数不相同,则说明是新的数,将它存入新数组,并将j加1,指向新数组的下一个位置。
遍历完整个数组后,新数组中只保留了一个相同的数,并且后面的重复数都被删除了。
最后,函数返回新数组的长度j+1作为结果。
### 回答3:
```c
#include <stdio.h>
int fun(int arr[], int n) {
if(n<=1) return n; // 如果数组长度小于等于1,直接返回原数组长度
int i, j; // 双指针法处理数组
for(i=0, j=1; j<n; j++) {
if(arr[i] != arr[j]) {
arr[++i] = arr[j];
}
}
return i+1; // 返回删除重复元素后的数组长度
}
int main() {
int arr[] = {1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 7};
int n = sizeof(arr)/sizeof(arr[0]);
printf("删除重复元素后的数组长度为:%d\n", fun(arr, n));
return 0;
}
```
运行结果:
删除重复元素后的数组长度为:7
解释:
给定数组为{1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 7},使用双指针法处理:
- 初始时,i指向第一个元素,j指向第二个元素。
- 如果arr[i]和arr[j]相等,j后移。
- 如果arr[i]和arr[j]不相等,说明找到了一个新的不同元素,将arr[j]复制到arr[i+1],然后i和j都后移。
- 继续重复上述步骤,直到j超出数组范围。
最后得到的数组为{1, 2, 3, 4, 5, 6, 7},同时返回结果7。
请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
### 回答1:
```python
def fun(arr):
n = len(arr)
if n < 2:
return n
j = 0
for i in range(1, n):
if arr[i] != arr[j]:
j += 1
arr[j] = arr[i]
return j + 1
```
测试:
```python
arr = [1, 2, 2, 3, 3, 3, 4, 5, 5]
print(fun(arr)) # 输出:5
print(arr[:5]) # 输出:[1, 2, 3, 4, 5]
```
### 回答2:
定义函数fun如下:
```python
def fun(arr):
if len(arr) == 0: # 如果数组为空,直接返回0
return 0
count = 1 # 初始化计数器为1,表示至少会有一个不重复的数
prev = arr[0] # 用prev保存当前不重复的数
for i in range(1, len(arr)):
if arr[i] != prev: # 如果当前数与prev不相等,表示它是一个新的不重复的数
count += 1 # 计数器加1
prev = arr[i] # 更新prev为当前数
return count # 返回删除后数组中数据的个数
```
函数的思路是遍历一维数组,如果当前数与前一个数不相等,则计数器加1并更新prev为当前数。遍历结束后,计数器的值即为删除后数组中数据的个数。
例如,数组arr为[1, 2, 2, 3, 3, 3, 4, 5, 5],调用fun(arr)会返回5,表示删除后的数组为[1, 2, 3, 4, 5],其中只剩下5个不重复的数。
### 回答3:
编写函数如下:
```python
def fun(arr):
if not arr:
return 0
n = len(arr)
count = 1 # 初始数量为1
for i in range(1, n):
if arr[i] != arr[i-1]: # 如果当前数与前一个数不相同
arr[count] = arr[i] # 将当前数放入索引为count的位置
count += 1
return count
```
函数中的arr表示输入的一维数组,通过遍历数组,将不相同的数依次放入数组的前部分,最后返回剩余的元素个数count即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)