当前位置: 首页 > news >正文

面试——经典问题1

1、阶梯问题

问题描述:一个阶梯有n个级,一个人要走完这个阶梯,一步可以走一级或两级,问:共有多少个方案?

解决思路:当n=1时候,只有一种走法,当n=2时候有3种走法;那么n=3时候呢?到第三层的走法是到第一层的走法加上到第二层的走法所以显然这是个经典的递归问题。

  因此有a1=1,a2=2,an= an-1 + an-2,其中n>2;

方法1:

  设斐波那契数列的通项为An,An = (p^n - q^n)/√5,其中p = (√5 - 1)/2,q = (√5 + 1)/2

方法2:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int Fibonacci(int n)
 5 {
 6     if(n==1)
 7         return 1;
 8     else if(n==2)
 9         return 2;
10     else
11         return ( Fibonacci(n-1)+Fibonacci(n-2) );
12 }
13 
14 int main()
15 {
16     int result=0;
17     for(int i=1;i<=10;i++)
18     {
19         result=Fibonacci(i);
20         cout<<"result="<<result<<endl;
21     }
22     return 0;
23 }

执行结果:

方法3:当要求解的n很大的时候,递归耗时很大,因为其中存在很多重复计算的问题,所以采用动态规划,记录计算值,以减少耗时;

 1 #include<iostream>
 2 using namespace std;
 3 
 4 #define N 11
 5 int main()
 6 {
 7     int i;
 8     int A[N] = {0,1,2};
 9     for(i=3;i<N;i++)
10     {
11         A[i] = A[i-1] + A[i-2];
12         cout<<"result="<<A[i]<<endl;
13     }
14     return 0;
15 }

执行结果:

问题延伸:一步可以走一级或两级或者三级,问:共有多少个方案?

  则有a1=1,a2=2,a3=4,an= an-1 + an-2 + an-3其中n>3

2、不通过比较,找出两个数的最大值

一旦涉及到不用比较找最大值,一般只能通过位运算来实现

方法一:max = a - ( (a-b) & ( (a-b)>>31 ) )

  如果a > b,则后面部分将会出现(a - b)&(全0),即实现max = a - 0;

  如果a < b,则后面部分将会出现(a - b)&(全1),即实现max = a - (a - b) ;

方法二:max = ( (a+b) + |a-b| ) / 2

  加上 |a-b| 实际上是为了加上a与b的差值,( (a+b) + |a-b| )是想获得最大数的两倍

3、字符串反转

只需要遍历数组的一半就可以实现

 1 void StrReverse(string &s)
 2 {
 3     int i,len = s.length();
 4     char temp;
 5     for(i=0;i<len/2;i++)
 6     {
 7         temp = s[i];
 8         s[i] = s[len-i-1];
 9         s[len-i-1] = temp;
10     }
11 }

 

4、不用循环反转字符串

不能用到循环就只能——递归实现

 1 string Reverse(string s,int index)
 2 {
 3     if(index==0)
 4         return s.substr(0,1);
 5     return s.substr(index,1) + "" + Reverse(s,index-1);
 6 }
 7 int main()
 8 {
 9     string s;
10     cin>>s;
11     string str_test = Reverse(s,s.length()-1);
12     cout<<str_test<<endl;
13     return 0;
14 }

 

5、十度好友

问题描述:在社交网络中,如果A、B是好友,B、C是好友,且A、C不是好友,则C成为A的二度好友;同理定义十度好友;若给定一张社交网络图,求A的所有十度好友;

解决思路:两种方式求解

(1)想求十度好友,很容易想到的是利用DFS,把A节点作为根部,用DFS搜索到深度为十的所有节点;

  还有一个细节问题,因为网络是复杂的,从一个结点到另外一个结点的路径不止一条,即D可能是A的三度结点,也可能是A的8度结点,这时应该以三度结点为准;

  因此,如果利用DFS解决问题,需要对遍历过的结点做标记,并且该结点度数信息应该更新为更小的值;

(2)利用BFS解决,总体思路如下:

 1 把A放在queue_1里,设置degree = 0;
 2 while(degree != 0 && !queue_1.empty() )
 3 {
 4     遍历queue_1里所有元素
 5   {
 6         if(queue_1.element的邻居结点没有被访问过)
 7     {
 8             邻居结点放入queue_2中;
 9       从queue_1中删除queue_1.element;
10     }
11   }
12   把queue_2中的所有元素放入queue_1中;
13     degree++;
14 }
15 输出queue_1里的所有元素,即为A的十度好友;

 

转载于:https://www.cnblogs.com/Christal-R/p/7147142.html

相关文章:

  • AI行为树
  • solr和es的区别
  • 于ccexp.WebView调用loadURL的清除本地缓存
  • c#Code Contracts代码协定
  • Sql Server中集合的操作(并集、差集、交集)学习
  • Linux下汇编语言学习笔记1 ---
  • angularJs-route路由详解
  • python 博客
  • P1198 [JSOI2008]最大数(单调栈)
  • Windows内存管理的方式
  • [POJ2104]K-th Number
  • window10 java 环境变量配置
  • Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集
  • STC15F2K60S2与USART HMI串口屏之间的通信
  • 关于JAVA中包装类的是什么类型传递这个问题的笔记
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • bootstrap创建登录注册页面
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript弹出层-初探
  • Linux后台研发超实用命令总结
  • Lucene解析 - 基本概念
  • python大佬养成计划----difflib模块
  • Python爬虫--- 1.3 BS4库的解析器
  • redis学习笔记(三):列表、集合、有序集合
  • SpiderData 2019年2月23日 DApp数据排行榜
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 阿里云Kubernetes容器服务上体验Knative
  • 从零开始在ubuntu上搭建node开发环境
  • 来,膜拜下android roadmap,强大的执行力
  • 力扣(LeetCode)56
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 配置 PM2 实现代码自动发布
  • 说说动画卡顿的解决方案
  • 再次简单明了总结flex布局,一看就懂...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)STL算法之元素计数
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (小白学Java)Java简介和基本配置
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ******之网络***——物理***
  • *1 计算机基础和操作系统基础及几大协议
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET开发者必备的11款免费工具
  • .NET开源快速、强大、免费的电子表格组件