2016恒生电子笔试两道算法题

1.求出1到100之间所有素数,要求时间复杂度最优。
我的最优解决方案是吧素数一个个放入一个素数数组里面(初始吧2放进去),后面的数只要判断是否能够整除这个素数数组里面的所有素数就可以判断是否为素数,如果全部不能整除则为素数。
具体实现很简单,就不给实现了。
2.知道1到100天的股票价格,你最多能进行两次买入卖出,求收益最大是多少。(从第二天开始进行买卖操作)
首先我想到八皇后问题,依照八皇后问题肯定能够解决问题。但是八皇后问题没有从小到大的排序所以要把所有排序遍历,这个操作天数从小到大排序根据这个可以得到更好的算法。考试一时也没有想到,回来以后一时也不好实现,希望各位高手可以给出更好算法,我这里按照八皇后算法思路给出解答,算抛砖引玉了。
2.1)八皇后算法C语言解法
  1. //八皇后问题
  2. //第一个问题:
  3. //设我们要在n行n列的棋盘上放置n个皇后。现假设我们已经把前面的k-1个皇后放好了,我们要考虑如何放置第k个皇后(k小于等于n)。怎么办呢>
  4. //我们的方法是把第k个皇后放到第k行的某一列,怎么确定它是哪一列呢?方法是从第一列到第n列,我们逐个去判断第k个皇后是否合适放到该位置.
  5. //设它现在放的位置是第a[k]列,我们要求
  6. //并且对j=1,...,k-1, 都要求a[k]!=a[j],同时|a[k]-k||!=|a[j]-j|。
  7. //第二个问题:我们在找第k个皇后的合适位置时结果有这样三种:
  8. //1:找到了合适的位置,并且k=n,这时候我们就找到了一组位置来放这些皇后。
  9. //2:找到了合适的位置,但k小于n,这时候我们就要考虑如何放置第k+1个皇后。
  10. //3:没找到合适的位置,这时候怎么办呢?
  11. /*
  12. int x[100];//x[i]表示第i行的数据放入的列号.
  13. bool place(int k)//考察皇后k放置在x[k]列是否与前面行的数据发生冲突
  14. {
  15. int i;
  16. for(i=1;i<k;i++)
  17. if((x[k]==x[i]||abs(k-i)==abs(x[k]-x[i]))
  18. //判断的标准是它不能与前面的每一行的数据放在同一列,并且不能构成对角线
  19. return false;
  20. return true;
  21. }*/
  22. /*void queue(int n)
  23. {
  24. int i,k;
  25. for(i=1;i<=n;i++) //首先让所有皇后的初始位置都为第0列。
  26. x[i]=0;
  27. k=1;//从第一个皇后开始搜素
  28. while(k>=1)
  29. {
  30. x[k]=x[k]+1; //在下一列放置第k个皇后
  31. while(x[k]<n&&!place(k))//x[k]<=n表示第k个皇后还有位置可放, !place(k)表示当前位置不适合
  32. x[k]=x[k]+1;//搜索下一列
  33. if(x[k]<=n&&k==n)//得到一个输出
  34. {
  35. for(i=1;i<=n;i++)
  36. printf("%d ",x[i]);
  37. printf("\n");
  38. //return;//若return则只求出其中一种解,若不return则可以继续回溯,求出全部的可能的解
  39. }
  40. else if(x[k]<=n&&k<n)
  41. k=k+1;//放置下一个皇后
  42. else
  43. {
  44. x[k]=0;//重置x[k],回溯
  45. k=k-1;
  46. }
  47. }
  48. }*/
  49. //要点:当程序发现目前无法放置第k个皇后时,它会调整第k-1个皇后的位置,
  50. //实现过程是;k=k-1;x[k]=x[k]+1;
  51. //等它调整好k-1个皇后的位置时,要重新从1个位置开始重新放置第k个皇后。
  52. //实现过程是;x[k]=0;x[k]=x[k]+1;
  53. /* void main()
  54. {
  55. int n;
  56. printf("输入皇后个数n:\n");
  57. scanf("%d",&n);
  58. queue(n);
  59. }*/
2.2)股票最优解算法:
  1. package test;
  2. import java.util.Random;
  3. import java.util.TreeSet;
  4. public class HenShengTest {
  5. static int STARTNUM=2;//操作开始时间
  6. static int ALLNUM = 5;//一共有多少天的价格数据
  7. static int BoughtNum= 4;//交易次数,必须是2的倍数
  8. static int [] a = new int[ALLNUM+1]; //股票输入的ALLNUM个数字的价格
  9. static int [] x=new int [BoughtNum+1];//放置每次操作的所在天数,本题系数大于等于5就行
  10. static TreeSet<Integer> setFin=new TreeSet<>();//放置相应操作次数的最优解,BoughtNum= 4时会放入两次操作和四次操作的最优解
  11. static boolean place(int k)//考察k步操作放置在x[k]列是否与前面行的数据发生冲突
  12. {
  13. int i;
  14. for(i=1;i<k;i++)
  15. if(x[k]<=x[i])//第K部操作天数必须比前面的天数都要大
  16. return false;
  17. return true;
  18. }
  19. static void queue(int n)
  20. {
  21. TreeSet<Integer> set = new TreeSet<>();
  22. int [] b=new int[n+1];//每次操作的最大天数,比如四次操作则放置{97,98,99,100}
  23. int i,k;
  24. for(i=1;i<=n;i++) //首先让所有操作的初始位置都为第STARTNUM-1天。
  25. x[i]=STARTNUM-1;
  26. for (int j = 1; j <= n; j++) {
  27. b[j]=ALLNUM-n+j;
  28. }
  29. k=1;//从第一步操作开始搜素
  30. while(k>=1)
  31. {
  32. x[k]=x[k]+1; //本次操作天数加一
  33. while(x[k]<b[k]&&!place(k))//x[k]<b[k]表示第k个操作还有位置可放, !place(k)表示当前天数不适合
  34. x[k]=x[k]+1;//搜索下一列
  35. if(x[k]<=b[k]&&k==n)//得到一个输出
  36. {
  37. set.add(-a[x[4]]+a[x[3]]-a[x[2]]+a[x[1]]);
  38. }
  39. else if(x[k]<=b[k]&&k<n)
  40. k=k+1;//放置下一个操作
  41. else
  42. {
  43. x[k]=0;//重置x[k],回溯
  44. k=k-1;
  45. }
  46. }
  47. setFin.add(set.last());
  48. }
  49. /**
  50. *放置操作次数的最优解进入 setFin
  51. */
  52. public static void countAll(){
  53. while (BoughtNum>0) {
  54. queue(BoughtNum);
  55. BoughtNum-=2;
  56. }
  57. }
  58. public static void main(String[] args) {
  59. for (int i = 1; i <= ALLNUM; i++) {
  60. Random random =new Random();
  61. a[i]=random.nextInt(100);
  62. }
  63. for (int i : a) {
  64. System.out.print(i+" ");
  65. }
  66. countAll();
  67. System.out.println();
  68. /* System.out.println();
  69. queue(BoughtNum);*/
  70. if (setFin.last()<0) {
  71. System.out.println("we can't buy anything............");
  72. }
  73. System.out.println(setFin.last());
  74. }
  75. }

2016恒生电子秋招笔试两道算法题相关推荐

  1. 搜狗2020秋招笔试的一道算法题

    搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...

  2. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  3. BAT 七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  4. 【算法】两道算法题根据提供字母解决解码方法和城市的天际线天际线问题

    算法目录 解码方法 Java解答参考: 天际线问题 Java解答参考: 大家好,我是小冷. 上一篇了解了项目相关的知识点 接下来看下两道算法题吧,用Java解答,可能更能激发一下大脑思考. 解码方法 ...

  5. 2014年阿里巴巴校园招聘两道算法题

    昨天阿里巴巴校园招聘在线测试,总的来说算法题比较简单,至于前面的选择题不是本人的强项,个人感觉比较难.下面我们说说两道算法题: 第一题大意是有一个quary和text要求找出两者匹配最长的字符串的长度 ...

  6. 度小满笔试两道编程题2020/09/20

    备战秋招面试 微信搜索公众号[TechGuide]关注更多新鲜好文和互联网大厂的笔经面经. 作者@TechGuide 点赞再看,养成习惯,您动动手指对原创作者意义非凡

  7. 笔试:深圳中博(2023.2.7)两道算法题 <未通过>

    前言 笔试分两部分:一道填空题.一道编程题.语言自选,我选择的Java语言 答案如有错误,希望指出来,编程题答案仅供参考,笔试时间紧张,写的比较垃圾,自己笔试后看感觉是很鸡肋 填空题 阅读下列程序说明 ...

  8. 位运算的那些奇技淫巧 | 掌(装)握(逼)必备,妙解两道算法题

    这里写目录标题 一.常(装)见(逼)的位操作 先看几个有意思的位操作: 1.判断奇数偶数 2.交换两个数字 3.找出没有重复的数字 4.m的n次方 5.判断一个数是不是二的指数 6.找出不大于N的最大 ...

  9. 关于有序二维矩阵查找和字符串替换的两道算法题

    最近看一本书上写到的两个面试题 于是实现了一下 感觉思路很好,大牛略过 : 1.对于一个二维矩阵,从左到右  从上到下 都是递增的,如何判断一个值是否在矩阵内部?(C实现  实现复杂度 O(n)) b ...

最新文章

  1. [DevOps] 认识一下
  2. leetcode算法题--学生分数的最小差值
  3. 【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
  4. 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”
  5. 国外机器人产业发展经验
  6. 抛物线交点式公式_二次函数顶点式、交点式、两根式概念解读
  7. I00021 有负数项的数列之和
  8. jni实现回调java函数
  9. 视觉三维重建中的关键技术及代码实现视频分享
  10. 使用ucinet和netdraw做文献计量的可视化分析+利用spss做系统聚类分析
  11. PHP将PPT文件转成图片
  12. 201771010102 常惠琢 《面向对象程序设计(java)》第十三周学习总结
  13. 鸿蒙系统pc版 硬件要求,原神全平台配置要求 原神配置需求一览
  14. Windows Azure 解决方案系列: Real World Windows Azure: 与微软杰出工程师, Sean Nolan的访谈...
  15. 用Java正则替换手机号中间4位数
  16. FreeBSD常用命令110条
  17. OpenGL4.0学习5.1--纹理(Targa图片贴图)
  18. [SRS+docker]实现直播服务器 2 SRS单机直播能力验证
  19. 反电动势的危害和简易保护措施
  20. frame-relay 学习笔记

热门文章

  1. SparkShell操作
  2. Python 基础课程第十天
  3. 使用JSARToolKit5 开发AR应用 (1) 简介
  4. CAD 二次开发再blockTableRecord中添加hatch,绘制指北针实例
  5. 打开控制面板的命令control
  6. 软件测试面试题库和答案解析
  7. 标题: 巧用curl代替ez-ipupdate更新动态dns[zt]
  8. Unity 3D游戏开发 - U3D进阶 | 声音组件之 AudioSource
  9. wma格式怎么转换mp3?
  10. C4D云渲染平台哪家好?