zoukankan      html  css  js  c++  java
  • 面试题测试

    在用c++写着点东西,但是这两天看了看面试题,网上的微软面试100题之类的,发现自己的基础还是很差的。做了5道之后就感觉力不从心了,于是希望自己通过看这个方面的资料,写点东西,每天一点点的坚持吧。

    看了这个博客http://blog.csdn.net/v_july_v/article/details/6460494总结得挺好的。

    1、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
    如把字符串abcdef左旋转2位得到字符串cdefab。
    请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)

    看到这个题目想到的方法就是直接取前两位再取后几位,然后把前面的两位放到最后去就OK了。于是写下代码

    #include<iostream>
    #include "string.h"
    
    char* leftRevolve(char *arr,char*dst,int k);
    int main()
    {
    	char a[]="abcdefghijk";
    	char d[]="abcdefghijk";
    	char * ps = leftRevolve(a,d,3);
    	for(;*ps!='\0';ps++)
    		std::cout<<*ps;
        std::cout<<std::endl;
    	ps=NULL;
    	return 0;
    }
    
    
    char *leftRevolve(char * arr,char * dst,int k)
    {
    	char*p=arr;//定义指针指向数组的起始位置。
    	char*q=dst;//放入参数中,目的是为了方便初始化。
    	
    	int len =strlen(arr);//获得字符串长度
    	if(k>len)//如果k大于n是k取k%n
    	{
    		k%=len;
    	}
    	p+=k;//从第三个开始
    	int i=len-k;
    	while (i--) {
    		*(q++)=*(p++);
    	}
    	p=arr;//定义指针指向数组的起始位置。
    	while (k--) {
    		*(q++)=*(p++);
    	}
    	*(q++)='\0';
    	return dst;
    }

    好了,测试完了之后,看了下那面的那个博客。写出了其它几种思路。另外右移位数K大于N的时候,K值为k%n。

    1、每次将数组中的元素右移一位,循环K次。

    如:abcd1234→4abcd123→34abcd12→234abcd1→1234abcd。

    2、变换的过程通过以下步骤完成:
    逆序排列abcd:abcd1234 → dcba1234;
    逆序排列1234:dcba1234 → dcba4321;
    全部逆序:dcba4321 → 1234abcd。

    3、通过反转1、首先分为俩部分,X:abc,Y:def;
                    2、X->X^T,abc->cba, Y->Y^T,def->fed。
                    3、(X^TY^T)^T=YX,cbafed->defabc,即整个翻转。

    4、如果abcdef ghij要变成defghij abc:
                     abcdef ghij
                     1. def abc ghij
                     2. def ghi abc j      //接下来,j 步步前移
                     3. def ghi ab jc
                     4. def ghi a j bc
                     5. def ghi j abc

    5、通过递归

    设原始问题为:将“123abcdefg”左旋转为“abcdefg123”,即总长度为10,旋转部("123")长度为3的左旋转。按照思路二的运算,演变过程为“123abcdefg”->"abc123defg"->"abcdef123g"。这时,"123"无法和"g"作对调,该问题递归转化为:将“123g”右旋转为"g123",即总长度为4,旋转部("g")长度为1的右旋转。

    6、stl::rotate 算法的步步深入

    重点说下这个算法,这个在july的博客中讲的很清楚了,很佩服他能把一个算法上的问题扩展这么多,也行这个深度还谈不上科研,但是这个深度对于一般的程序员来说,是绰绰有余了。

    这边我理解还不是很深入,先写到这。

  • 相关阅读:
    Fragment学习简介与生命周期研究
    POJ 2513 Colored Sticks 【Trie树】
    listView实时更新
    苹果技术支持联系方式
    文件中随机读取行问题
    hdu 4554
    hdu 4556
    离开通讯后就职互联网行业的一些感悟
    HDU1016:Prime Ring Problem
    dbgrideh通用打印
  • 原文地址:https://www.cnblogs.com/fengbing/p/2850162.html
Copyright © 2011-2022 走看看