码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer习题集2

时间:2015-08-18 15:34:16      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

1.把数组排成最小的数

技术分享
class Solution {
public:
     
    static bool compare(const string& s1, const string& s2) {  
        string t1 = s1 + s2;   
        string t2 = s2 + s1;
        return t1 <= t2? true : false;
    }
     
    string PrintMinNumber(vector<int> numbers) {
     
        string str;
        int i, len = numbers.size();   
        if (len<1) return str;
     
        string res;
        vector<string> vt;
        for (i = 0;i<len;++i) { 
            stringstream stream;       
            stream << numbers[i];    
            stream >> str;       
            vt.push_back(str);
        }
     
        sort(vt.begin(), vt.end(), compare);   
        for (i = 0;i<len;++i)       
            res += vt[i];  
        return res;
    }
};
View Code

这里使用string会比使用char*更加快捷方便。

另外使用sort而不是qsort,主要是sort是qsort的升级,且参数更少,不需要制定每个参数占据的内存空间大小。

 

2.字符流中第一个不重复的字符

少有的一遍通过的程序,眼泪都快流下来了

技术分享
class Solution
{
public:
    
    Solution():index(0){ //初始化位置
        for(int i=0;i<256;++i)
            pos[i]=-1;
    }
    
    
  //Insert one char from stringstream
    void Insert(char ch)
    {
         if(pos[ch]==-1)
             pos[ch]=index;
         else if(pos[ch]>=0)
             pos[ch]=-2;
             
         ++index;
    }
    
    
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {  
        char res=#;
        int minv=1e8,i; //设置字符串max值
        for(i=0;i<256;++i){
            if(pos[i]>=0&&pos[i]<minv){ //若是当前位置小于min,则对min进行更新
                res=(char)i;
                minv=pos[i];
            }  
        }
        
        return res;
    }
    
private:
    int index;
    int pos[256];
};
View Code

 

剑指offer习题集2

标签:

原文地址:http://www.cnblogs.com/jason1990/p/4739232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!