请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
时间: 2023-12-03 20:46:07 浏览: 59
以下是函数fun的代码实现:
```c
int fun(int arr[], int len) {
if (len <= 1) {
return len;
}
int i, j;
for (i = 1, j = 0; i < len; i++) {
if (arr[i] != arr[j]) {
arr[++j] = arr[i];
}
}
return j + 1;
}
```
函数的思路是使用双指针,i指向当前扫描的元素,j指向已经处理好的元素的末尾。如果i所指向的元素和j所指向的元素不同,那么将i所指向的元素加入到j的后面。
最后返回j+1即为删除重复元素后的数组长度。
相关问题
50、请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 50、请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
以下是函数fun的实现:
```c
int fun(int arr[], int n) {
int i, j;
j = 0; // j 记录不重复的数的位置
for (i = 1; i < n; i++) {
if (arr[i] != arr[j]) { // 如果当前数与前一个不同,则记录到新的位置
j++;
arr[j] = arr[i];
}
}
return j + 1; // 返回删除重复数后的数组长度
}
```
使用示例:
```c
int main() {
int arr[] = {2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10};
int len = sizeof(arr) / sizeof(arr[0]); // 数组长度
int newLen = fun(arr, len);
printf("删除重复数后的数组:");
for (int i = 0; i < newLen; i++) {
printf("%d ", arr[i]);
}
printf("\n数组长度为:%d\n", newLen);
return 0;
}
```
输出结果:
```
删除重复数后的数组:2 3 4 5 6 7 8 9 10
数组长度为:9
```
请编写函数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即可。
阅读全文