• 常见面试题学习(5)


    转自:   http://www.cnblogs.com/qsort/archive/2011/08/23/2150089.html

    1,一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。
    设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。

    最直接也最清晰的做法就是排序然后两边往中间同步走,O(nlogn) + O(n)。 这是标准做法,如果有序序列,更好,只用O(n)就行

    不过既然相同数值不重复出现,还对空间没啥说的,那就bitmap吧。。。可以做到O(n)。太无聊了,还要揣摩出题人的思路。

    2,一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。

    请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
    注意:
    - 5个数值允许是乱序的。比如: 8 7 5 0 6
    - 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
    - 0可以多次出现。
    不管是5个还是500个,走一遍看一下min和max,减一减就可以了。。当然附带上0的处理。

    3,正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12

    (1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项
    (2)、设计测试数据来验证函数程序在各种输入下的正确性。

    能被a整除的序列,是a的倍数,a, 2a, 3a, ...

    能被b整除的序列,是b的倍数,b, 2b, 3b, ...

    能被a或者b整除的序列,就是这两个序列的merge。。

    既然给出了N,分别计算出a,b的倍数N个,然后合并,当合并后的序列个数达到N时,结束

    4,有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在大写字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法 c语言函数原型void proc(char *str) 也可以采用你自己熟悉的语言。

    这其实是qsort中partition的一步,略。

    那个分割的字符应该选择A或者z ,不管给出的原字符串是否含有A或者z,注意一下边界A或者z的处理就行

    5,输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。

    只要先将整个句子翻转一次,然后每个单词内部再翻转一次,就行了,代码暂略。

  • 相关阅读:
    使用Dagger2做静态注入, 对比Guice.
    利用Cglib实现AOP
    Guice之IOC教程
    layui使用心得
    Protocol Buffer序列化对比Java序列化.
    IE之页面加载慢.
    浏览器Agent大全 (含IE 11, Edge)
    ASpectJ对AOP的实现
    Spring之AOP
    创建自己的加密货币MNC——以太坊代币(二)
  • 原文地址:https://www.cnblogs.com/hitwtx/p/2152980.html
Copyright © 2020-2023  润新知