博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
alg: 首尾相连的珠子
阅读量:4321 次
发布时间:2019-06-06

本文共 1111 字,大约阅读时间需要 3 分钟。

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

转载于:https://www.cnblogs.com/cutepig/archive/2011/02/17/1956890.html

你可能感兴趣的文章
HDU2825 Wireless Password 【AC自动机】【状压DP】
查看>>
BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
查看>>
HUT-XXXX Strange display 容斥定理,线性规划
查看>>
mac修改用户名
查看>>
一道关于员工与部门查询的SQL笔试题
查看>>
Canvas基础
查看>>
[Hive - LanguageManual] Alter Table/Partition/Column
查看>>
可持久化数组
查看>>
去除IDEA报黄色/灰色的重复代码的下划波浪线
查看>>
Linux发送qq、网易邮件服务配置
查看>>
几道面试题
查看>>
【转】使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介
查看>>
js用正则表达式控制价格输入
查看>>
chromium浏览器开发系列第三篇:chromium源码目录结构
查看>>
java开发操作系统内核:由实模式进入保护模式之32位寻址
查看>>
第五讲:单例模式
查看>>
Python编程语言的起源
查看>>
Azure ARMTemplate模板,VM扩展命令
查看>>
在腾讯云上创建您的SQL Cluster(4)
查看>>
linux ping命令
查看>>