博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
100-88
阅读量:6222 次
发布时间:2019-06-21

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

hot3.png

88.2005年11月金山笔试题。编码完成下面的处理函数。

函数将字符串中的字符'*'移到串的前部分,

前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。

如原始串为:ab**cd**e*12,
处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)

思路:

*都是一样的,所以只要知道有多少*然后最后的时候补上就好了。现在首先要做的就是将所有非*的字符移动到数组的后面,这就简单了。

贴上代码:

int movStar(char * p, int n){ char * q1 = p+(n-1), *q2 = p+(n-1); while(q1>=p) {  if(*q1 != '*')   *q2-- = *q1;  q1--; } int nRet = q2 - q1; while(q2>=p) {  *q2-- = '*'; } return nRet;}
可是,我最初的想法可复杂多了。因为我开始的时候,只是想到了要进行交换位置,而没想到要直接覆盖。而且是要移动*和非*字符,时间复杂度差不多O(n^2)了都。自己太年轻了。。不过到现在也做了这么多的面试题目了。我自己的感觉是,有很多题目都是十分巧妙的。如果初次见的话,一般很难直接想到最优的解法。当然是大牛的话就不多说了。。。我觉得无论是面试题,还是将来实际工作中遇到的问题,首先第一步当然是要实现之,先不考虑时间和空间的限制。如果连最基本的功能的实现都做不到,什么都是空谈。其次才是再考虑时间和空间的问题,然后进一步优化得到比较优化的解。。。恩恩。

转载于:https://my.oschina.net/dapengking/blog/100992

你可能感兴趣的文章
RDA PQ工具使用 (屏参调整)
查看>>
Servlet学习笔记(三):HTTP请求与响应
查看>>
HttpClient request payload post请求
查看>>
MySQL慢查询
查看>>
Bootstrap树控件(Tree控件组件)使用经验分享
查看>>
Linux搭建JavaEE开发环境与Tomcat——(十)
查看>>
JFinal 学习笔记之Handler包分析
查看>>
Redis总结(六)Redis配置文件全解
查看>>
“四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
查看>>
iOS开发如何在一个透明视图上添加不透明的子控件
查看>>
加解密
查看>>
Cortex-A9 UART
查看>>
envoy 功能介绍
查看>>
百度地图api ak值
查看>>
macOS High Sierra Terminal巨卡问题的解决
查看>>
【SSH项目实战】脚本密钥的批量分发与执行【转】
查看>>
[LeetCode] Largest Palindrome Product 最大回文串乘积
查看>>
JAVA生成问答式验证码图片,支持加减算法
查看>>
『TensotFlow』转置卷积
查看>>
windows 7系统搭建PHP网站环境
查看>>