zoukankan      html  css  js  c++  java
  • alg: 首尾相连的珠子

    #include <stdio.h>
    /*感觉稍微难点的三个:
    1)设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)


    3)设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,则中国人民 人民中国都有效。要求:
      1)系统每秒的查询数量可能上千次;
      2)词语的数量级为10W;
      3)每个词至多可以与1W个词搭配
     
     当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息.
     */

    /*2)一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
    time: O(m)
    space: O(N)*/
    #define MAX_N 10
    bool Select(int m, int const *data, int n, int *start_idx, int *length)
    {
        int color[MAX_N];
        int nColor=0;
        memset(color, 0, sizeof(color));

        *start_idx = 0, *length = m;
        
        int best_start_idx = 0;
        int best_length = m;

        for(int i=0; i<m-n; i++)
        {
            if(!color[data[i]]) nColor++;
            color[data[i]]++;

            if(nColor==n && i-best_start_idx+1<best_length)
            {
                best_length = i-best_start_idx+1;
                *start_idx = best_start_idx;

                color[data[best_start_idx]]--;
                if(0==color[data[i]])
                    nColor--;
                else
                    i--;
                best_start_idx++;
            }
        }

        return true;
    }

    int main(int argc, char *argv[])
    {
        int n=6;
        int data[]={0,1,2,3,4,4,5,4,2,3,1,0,2,3};
        int m = sizeof(data)/sizeof(data[0]);

        int start_idx;
        int length;
        Select(m, data, n, &start_idx, &length);

        return 0;
    }
  • 相关阅读:
    hdu 2881 Jack's struggle(DP)
    [置顶] DataGridView控件---绑定数据方法
    Computational Geometry Template_Polygon
    Max retries exceeded with url
    Linux /proc 的意义
    [置顶] 生成树协议介绍
    StringBuffer与StringBuilder的异同
    linux 下Eclipse for C/C++的不常见设置
    [Elasticsearch] 分布式搜索
    oracle递归函数
  • 原文地址:https://www.cnblogs.com/cutepig/p/1956890.html
Copyright © 2011-2022 走看看