请教各位前辈,对于逻辑思维和算法不好的人如何打开这个结?
面试也好还是研发过程中不乏有一些题目或者用到的算法.
比如:
1,已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
2,有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻
3,...
类似这样的.我相信版块像我这样的人很多,有些有工作经验或者思维强点的人看到题目 就可以开始动手。
你们的思路是如何的?就这2题可以说说自己的思路么?想借鉴一下.或者给予我一些提高算法和逻辑思维的办法.
做项目就不用多说,我现在也在工作.道理我懂,熟能生巧的道理.不过有的时候确实需要一些事半功倍的方法来提高自己的不足.
希望大牛小牛们不吝赐教
------解决方案--------------------
数组合并,可以遍历,也可以用LinQ的Union
排列组合http://www.cnblogs.com/rogerwei/archive/2010/11/18/1880336.html
------解决方案--------------------
第一个我会这么做:每次都读2个数组中最小的那一个,也就是下标为0的。比较,小的那个就存入新的数组。相等就随便取一个或者2个都取了。
------解决方案--------------------
这两个题,基本上都是算法导论上的原题,或者变体。
------解决方案--------------------
这个啊。其实办法很多啊。
一、两个本来有序的。把它们挨个比较。然后放到新的数组也行。
二、拿一个数组做为基本,第二个数组比较然后插值进去也可以。
三、把他们弄到一块,再排次序也可以的咯。。哈哈。
第二题嘛
既然是全排列,也就多个循环。这里是六个,哪就六个循环,注意是六个并列的不是六层嵌套啊。
每个循环负责一位数,,然后在循环里边加逻辑判断与控制。比如第3位不能是4,那就在第三个循环把4给过滤掉。然后还有5和3不能相邻,那就在从第二个循环开始判断前面产生的是否是5或3,如果是的话,自己就不能是5或者3咯。
差不多就这样吧。。不一定正确。没有写代码验证啊。
------解决方案--------------------
1.去中间的交集,把两头的已经有序的不做排序,中间的交集重新排序。
只是想,大部分实践的时候直接就合并到一起重新排序了
2.这个没有想法,使用递归排列,第三层递归获取第三位时,如果是4的时候去掉。
其他每层递归只要是3,5就去找上一位是不是3后者5
这是硬件问题,硬伤,只能通过软件补充了