2018华为笔试题

题目描述

给定一个整数,给出消除重复数字以后最大的整数

输入描述:

正整数,注意考虑长整数

输出描述

消除重复数字后的最大整数

示例1

输入

423234

输出

432

思路分析 :要保存原来的顺序这个题目才有意思,如果不保存原来的顺序,那直接一个set就搞定了。

很明显这个数字的最大长度不会超过20。怎么暴力都可以了...

思路就是贪心的放每一位ie数字,

比如423234

我们放完第一个4 再放2的时候直接放入,再放3的时候发现前面的2比3小,而且2还有一个剩余,那么我们就用3替换2,一次类推....实现的时候我们可以用栈去搞

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    ll n, tmp;
    vector<int> cnt(10);
    vector<int> s;
    vector<int> vis(10);
    cin >> n;
    tmp = n;
    while(tmp > 0) {
        cnt[tmp%10]++;
        s.push_back(tmp%10);
        tmp /= 10;
    }
    reverse(s.begin(), s.end());
    stack<int> st;
    for (int i = 0; i < s.size(); ++i) {
        //cout << s[i] << endl;
        cnt[s[i]]--;
        if (st.empty()) {
            st.push(s[i]);
            vis[s[i]] = 1;
        } else {
            while(!st.empty() && st.top() < s[i] && cnt[st.top()] && !vis[s[i]]) {
                vis[st.top()] = 0;
                st.pop();
            }
            if (!vis[s[i]]) st.push(s[i]), vis[s[i]] = 1;
        }
    }
    ll ans = 0, T = 1;
    while (!st.empty()) {
        ll x = st.top();st.pop();
        ans += x*T;
        T *= 10;
    }
    cout << ans << endl;
    return 0;
}
时间: 2024-11-06 13:39:43

2018华为笔试题的相关文章

网易2018校招笔试题-数组能不能满足重排列后任意相邻的元素积都是4的倍数

今天看了一下网易最新的校招笔试题: 小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:     对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.     小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 代码如下: 1 import java.util.Scanner; 2 3 /** 4 * Created by jy on 2017/9/9. 5

删数字(华为笔试题)

Be4m83寿qyo履谡4http://www.docin.com/app/user/userinfo?userid=179253696 cp那8泌qg捣腿6sihttp://www.facebolw.com/space/2103619/follower 3傅2派O9捣枪幼2赝http://jz.docin.com/hfzi26050 甲4n97FVL焙9侗Xhttp://shequ.docin.com/rurf998 j8f3HX识9县Jhttp://shufang.docin.com/thf

删数字 -- 2016华为笔试题

题目: 有一个整型数组a[n]顺序存放0 ~ n-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置. 以 8 个数(n=8)为例:{0,1,2,3,4,5,6,7}, 0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除. 思路: 这题有3种解法, 第一种就是构建循环链表模拟删数字的过程,但是时间空间复杂度较高, 第二种是用LinkedList模拟删数字过程,相较

华为笔试题 合唱队

题目描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,   则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK. 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,

[算法]华为笔试题——拼音与英文转换

题目描述: 编写拼音与英文转换的函数,如果输入号码是英文,转成拼音,如果是拼音,转成英文,例如输入OneZeroDoubleThree,则输出YiLingSanSan. 拼音.英文见下表: Yi Er San Si Wu Liu Qi Ba Jiu Ling One Two Three Four Five Six Seven Eight Nine Zero 注意:每个单词均为首字母大写,遇到连续两个相同数字,输入可以前面加Double,输出不可以加Double. 输入描述: 由首字母大写的字符串

天上掉馅饼--移动研究院2018校招笔试题

题目: 天上掉馅饼 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 131072KB:其他语言 655360KB 题目描述: 大家都知道"天上不会掉馅饼"这句话,但是有一天,小明在回学校的路上,天上还真掉起了馅饼.小明的人品实在有点好,这馅饼会掉在小明身边10米的范围内.馅饼掉在地上显然就不能吃了,所以小明马上拿起他的背包去接.但是,小明是个技术宅,运动方面实在不太行,每秒钟只有在移动不超过1米的范围内接住馅饼.这条小路的图所示如下: 现在,我

2018头条笔试题-世界杯问题

题目: 输入如下面所示: 前一行是m行.n列 后面是这个m行n列的数据,从任意一个1出发,可上下.左右.斜角遍历 要求输出有多少个连通图.连通图中包含的最大连通个数. 10,10 0,0,0,0,0,0,0,0,0,0 0,0,0,1,1,0,1,0,0,0 0,1,0,0,0,0,0,1,0,1 1,0,0,0,0,0,0,0,1,1 0,0,0,1,1,1,0,0,0,1 0,0,0,0,0,0,1,0,1,1 0,1,1,0,0,0,0,0,0,0 0,0,0,1,0,1,0,0,0,0

华为笔试题--蛇形矩阵

1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 while(cin >> n) { 9 vector<vector<int>> matrix(n, vector<int>(n)); 10 int count = 0; 11 for(int i = 0; i < n; ++i) { 12 f

华为笔试题--最长公共子串

#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; //最长公共子串 class Solution { public: int longestSubstring(string x, string y) { if (x.size() > y.size()) swap(x, y); // 题目要求短串优先 vect