• 4、消除重复元素--网易2017春招


    [编程题] 消除重复元素
    时间限制:1秒
    空间限制:32768K
    小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。 
    输入描述:
    输入包括两行: 第一行为序列长度n(1 ≤ n ≤ 50) 第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以空格分隔
     
     
    输出描述:
    输出消除重复元素之后的序列,以空格分隔,行末无空格
     
    输入例子:
    9 100 100 100 99 99 99 100 100 100
     
    输出例子:
    99 100
     
    解题思路:本题记录最后一个出现的不重复的数,因此想到从后往前遍历,遇到未出现过的就存起来,遇到重复的遍历下一元素。因为是倒着存入的,因此输出时是反序的,因此想到使用栈结构存储。
     1 #include <iostream>
     2 #include <stack>
     3 #include <vector>
     4 using namespace std;
     5  
     6 int main()
     7 {
     8     int n;
     9     while(cin>>n)
    10     {
    11         int a[n];
    12         for(int i=0;i<n;i++)
    13         {
    14             cin>>a[i];
    15         }
    16         stack<int> s;
    17         vector<int> v;//中间变量,存储数组中已出现元素
    18         int k = 0;
    19         for(int i=n-1;i>=0;i--)
    20         {
    21             s.push(a[i]);
    22             v.push_back(a[i]);
    23             // 和已出现的所有进行比较
    24             for(int j=0;j<v.size();)
    25             {
    26                 // 不相等就比较已出现数组下一位置
    27                 if(a[i-1] != v[j])
    28                 {
    29                     j++;
    30                 }
    31                 // 相等,则遍历原数组下一个位置,并且要记得将j置为0,下一还从已出现数组的第一个位置开始比较
    32                 else
    33                 {
    34                     i--;
    35                     j = 0;
    36                 }
    37             }
    38         }
    39         // 此时存储s的个数,否则如果直接在for循环中和s.size()比较,s.size()是变化的
    40         int n = s.size();
    41  
    42         for(int i=0;i<n-1;i++)
    43         {
    44             cout<<s.top()<<" ";
    45             s.pop();// 出栈
    46         }
    47         cout<<s.top();
    48     }
    49     return 0;
    50 }
    本题更好的方法:定义一个数组b,如果a[i]出现过b[a[i]]++,这样,只有b[a[i]] == 0时才进行插入到stack中
     1 #include <iostream>
     2 #include <stack>
     3 #include <vector>
     4 using namespace std;
     5  
     6 int main()
     7 {
     8     int n;
     9     while(cin>>n)
    10     {
    11         int a[n];
    12         int b[1005]={0};//a[i]最大为1000
    13         for(int i=0;i<n;i++)
    14         {
    15             cin>>a[i];
    16         }
    17         stack<int> s;
    18         for(int i=n-1;i>=0;i--)
    19         {
    20             if(b[a[i]] == 0)
    21             {
    22                 s.push(a[i]);
    23                 b[a[i]]++;
    24             }
    25         }
    26         int n = s.size();
    27  
    28         for(int i=0;i<n-1;i++)
    29         {
    30             cout<<s.top()<<" ";
    31             s.pop();// 出栈
    32         }
    33         cout<<s.top();
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    【数据删除】树
    线段树分治 学习笔记
    带删除并查集 学习笔记
    抖音极速版2022下载 Elon
    抖音极速版下载 Elon
    抖音下载 Elon
    什么是Optional【JDK 8特性】 Elon
    java8 stream().map().collect()用法
    vuex的使用
    Java发送简单email:SimpleEmail
  • 原文地址:https://www.cnblogs.com/qqky/p/6912007.html
Copyright © 2020-2023  润新知