剑指offer习题集2

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;
    }
};

这里使用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];
};

时间: 2024-10-12 18:56:04

剑指offer习题集2的相关文章

剑指offer习题集1

1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> PrintFromTopToBottom(TreeNode *root) { vector<int> res; if (NULL == root) return res; TreeNode* node; deque<TreeNode*> tmp; tmp.push_back(root

剑指offer习题集

1.重载赋值运算符函数:(具体见代码) //普通做法 CMyString& CMyString::operator=(const CMyString& str) { if (this == &str) return *this; delete[] m_Pdata; m_Pdata = new char[strlen(str.m_Pdata)+1]; strcpy(m_Pdata,str.m_Pdata); return *this; } //更加安全的做法,普通做法在new内存不足

牛客网剑指Offer习题集题解0

https://www.nowcoder.com/ta/coding-interviews 牛客个人界面欢迎互fo 0x00 二维数组中的查找 没啥难得,直接上二分就好了.注意二分别写挫了. 时间复杂度为\(O(nlogn)\) class Solution { public: bool Find(int target, vector<vector<int> > array) { int siz = (int)array.size(); for(int i=0;i<siz;+

【剑指offer】Q38:数字在数组中出现的次数

与折半查找是同一个模式,不同的是,在这里不在查找某个确定的值,而是查找确定值所在的上下边界. def getBounder(data, k, start, end, low_bound = False): if end < start : return -1 while start <= end: mid = ( start + end ) >> 1 if data[ mid ] > k: end = mid - 1 elif data[ mid ] < k: star

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

【剑指offer】二叉树的镜像

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25915971 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.C

【剑指offer】数组中仅仅出现一次的数字(1)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27649027 题目描写叙述: 一个整型数组里除了两个数字之外,其它的数字都出现了两次.请敲代码找出这两个仅仅出现一次的数字. 输入: 每一个測试案例包括两行: 第一行包括一个整数n,表示数组大小.2<=n <= 10^6. 第二行包括n个整数,表示数组元素,元素均为int. 输出: 相应每一个測试案例.输出数组中仅仅出现一次的两个数.输出的数字从小到大的顺序. 例子输入: 8 2 4

牛客网上的剑指offer题目

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一个字符串中的空格替换成"%20" 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 剑指offer 斐波那契数列 一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个

剑指Offer——如何做好自我介绍

剑指Offer--如何做好自我介绍 前言 自我特点+经历梳理 ??各位老师好,我叫某某某,研究生三年级,就读于某某大学信息科学与工程学院软件工程专业.主要使用的开发语言是Java,熟悉基本数据结构和基本算法实现:熟悉MySQL数据库:掌握Linux基本操作命令:所参与的主要项目有"立马送药","鲜花礼品网","基于Android实现的购彩系统"和"我看看"购物分享Android APP.其中,"立马送药"的