牛客刷题 01——KiKi去重整数并排序(C语言)

简介: 牛客刷题 01——KiKi去重整数并排序(C语言)

题目

图片.png


思路

既然题目说了是n个整数,且n小于等于1000,大于0。那么我们就造一个能装1000数据的数组,再通过遍历把数字装进去。

我采用的是先排序后删重,排序则使用我们最常见的冒泡排序。

如果,arr[i]大于它下一个数字就它俩互换位置。没什么毛病。关键就是for循环里变量的范围要把控好。

第二就是删重:如果arr[i]等于它之后的那个数,就把arr[i]删掉,让后一个数等于arr[i],相当于把arr[i]之后所有数都往前挪动一个数据。然后继续比较再覆盖就可。

最后注意,覆盖之后,原来的数组长度n,没挪动一次,n要进行-1操作,然后i也要-1,因为你这样覆盖要确保你每次都是第一个数和第二个数开始比较是否相等。


代码

#include <stdio.h>intmain()
{
intn=0;
intarr[1000] = {0};
scanf("%d",&n);
//接收n个数字inti=0;
for(i=0;i<n;i++)
    {
scanf("%d",&arr[i]);
    }
//处理过程//1.先排序,冒泡排序for(i=0;i<n-1;i++)
    {
intj=0;
for(j=0;j<n-1-i;j++)
        {
if(arr[j]>arr[j+1])
            {
inttemp=arr[j];
arr[j] =arr[j+1];
arr[j+1] =temp;
            }
        }
    }
//2.去重//最多比较的对数,是n-1for(i=0;i<n-1;i++)
    {
if(arr[i] ==arr[i+1])
        {
//把从i+1下标往后的元素全部往前覆盖intk=0;
for(k=i;k<n-1;k++)
            {
arr[k] =arr[k+1];
            }
n--;
i--;
        }
    }
//3.打印for(i=0;i<n;i++)
    {
printf("%d ",arr[i]);
    }
return0;
}


目录
相关文章
|
6月前
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
4月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
102 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
114 7
|
2月前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
6月前
|
C语言
【C语言刷题系列】删除公共元素
【C语言刷题系列】删除公共元素
|
6月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
18 0
|
2月前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
20 0
|
4月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)