算法和数据结构面试题

1.求子数组的最大和

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

因为是O(N)的复杂度,因此需采用的DP的思想,记录下当前元素之和(为其最优状态,既最大),将其与目前所得的最大和比较,若大于则更新,否则继续。状态的累加遵循这个过程:如果当前和小于0,则放弃该状态,将其归零。

//求子数组的最大和
//利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来小于0,则
//把当前元素之和清为0,否则则和最大和比较,更新最大和,最后得到必是子数组的最大和
#include<iostream>
using namespace std;
int findGreatestSubSum(const int a[],const int size){
int curSum=0;
int maxSum=0;
for(int i=0;i<size;i++){
curSum+=a[i];
if(curSum<0) curSum=0; //放弃这个阶段,从新开始
if(curSum>maxSum) maxSum=curSum; //更新最大和
}
if(maxSum==0){ //若是数组中的元素均为负数,则输出里面的最大元素
maxSum=a[0]; //当然这步也可以写到上面一个循环里
for(int i=1;i<size;i++){
if(maxSum<a[i]) maxSum=a[i];
}
}
return maxSum;
}
int main(void){
int a[10]={1, -2, 3, 10, -4, 7, 2, -5};
cout<<findGreatestSubSum(a,10)<<endl;
system("pause");
return 0;
}

2.你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。

如果你只能将金条切割两次,你怎样分给这些工人?

把金条分成三段(就是分两次,或者切两刀),分别是整根金条的1/7、2/7 4/7 第一天:给1/7的, 第二天:给2/7的,收回1/7的 第三天,给1/7的 第四天:给4/7的,收回1/7和2/7的 第五天:给1/7的 第六天:给2/7的,收回1/7的

第3题

翻转句子中单词的顺序。

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

例如输入“I am a student.”,则输出“student. a am I”。

/*
第 3 题(字符串)
翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
start time 15:12
end time 15:39
*/

#include <iostream>
#include <vector>
using namespace std;

typedef struct Words{
int len;
char * start;
}Words;
void reverseSentence(char * c)
{
vector<Words> S; //存储单词的栈

Words w;
w.start = c;
w.len = 0;
for (int i = 0; c[i] != ‘\0‘; i++)
{
if (c[i] != ‘ ‘)
{
w.len++;
}
else
{
if (w.len != 0)
{
S.push_back(w);
w.start = c + i + 1;
w.len = 0;
}
else //跳过多余的空格
{
w.start = c + i + 1;
}
}
}
if (w.len != 0) //压入最后一个词
{
S.push_back(w);
}

while (!S.empty())
{
Words w = S.back();
for (int i = 0; i < w.len; i++)
{
cout << *(w.start + i);
}
cout << ‘ ‘;
S.pop_back();
}
cout << endl;
}

int main()
{
char * c = " I am a student.";
reverseSentence(c);

return 0;
}

4:求1+2+…+n,

要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。

分析:这题本来很简单,但是不能用循环和条件判断语句。但是理论上所有的递归都可以转化为循环,那是否可以用递归代替循环呢?照着这个思路走下去,貌似可以。可是用递归的话,递归怎么终止呢?这就得在return语句中做文章了。最让人奔溃的是不让用乘除法。但是乘法本质上是加法的累加。

思路:

  1. 把循环化为递归。
  2. 乘法改为递归实现的累加。
  3. 递归的终止靠return语句做文章。

我最终的答案如下(包括测试程序):

  1. #include <stdio.h>
  2. int sum = 0;
  3. _Bool summation(int n)
  4. {
  5. sum += n;
  6. return n-1 && summation(n-1);
  7. }
  8. int main()
  9. {
  10. int n;
  11. scanf("%d",&n);
  12. summation(n);
  13. printf("%d\n",sum);
  14. return 0;
  15. }
时间: 2024-08-28 15:53:20

算法和数据结构面试题的相关文章

算法与数据结构面试题 网盘下载

网盘下载地址:点击下载 网盘下载地址:点击下载 更多面试题下载地址:https://www.zy139.cn/content/2019/2/11/182.html 原文地址:https://www.cnblogs.com/xuanxuan2015/p/10664004.html

C++数据结构面试题

原文:http://1527zhaobin.iteye.com/blog/1537110 一.判断链表是否存在环型链表问题:   说明:判断一个链表是否存在环,例如下面这个链表就存在环,n1-->n2-->n3-->n4-->n5-->n2,环的开始结点是n5 解法:这里有个比较简单的解法:设两个指针p1,p2,每次循环p1向前走一步,之向前走两步,直到p2碰到NULL指针(无环)或两个指针相等结束循环算法(有环),即如果两个指针相等则说明存在环. 代码如下: [cpp] v

Java数据结构面试题

1.栈和队列的共同特点是(只允许在端点处插入和删除元素) 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构) 5.下列关于栈的叙述正确的是(D)      A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征 6.链表不具有的特点是(B)A.不必事先估计存储空间       B.可随机访问任一元素 C.插入删除不需要移动元素      D.所需空间与线性表长度成正比 7.用链表表示线性表的优点是(便于插入和删除操作) 8.在单链表中,增加头结点的目的是(

数据库面试题(转)

数据库面试题(转) 基础: 1. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 2. SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵:Select ,insert,update,delete, 数据控制:grant,revoke 3. SQL常用命令: CREATE TABLE Stud

12道算法与编程面试题

12道Java算法与编程面试题 自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步!  算法与编程 1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 答: package cn.itcast; import java.io.File; import java.io.FileReader; import java.io.FileWriter; pub

12道Java算法与编程面试题

12道Java算法与编程面试题自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 算法与编程1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔.答:package cn.itcast; import java.io.File;import java.io.FileReader;import java.io.FileWriter; public cla

【美团点评】2020校招算法工程师方向笔试题

这套题难啊..好多坑点.而且想了好久.交卷两小时..想了一晚上. 第一题还是不知道怎么dp的..可能要坑一下明天补.. 如果有大佬能指点下我就更好了QAQ.我是真的菜.. 试题链接:2020校招算法工程师方向笔试题 5. 外卖小哥的保温箱 题意:众所周知,美团外卖的口号是:”美团外卖,送啥都快”.身着黄色工作服的骑手作为外卖业务中商家和客户的重要纽带,在工作中,以快速送餐突出业务能力:工作之余,他们会通过玩智力游戏消遣闲暇时光,以反应速度彰显智慧,每位骑手拿出装有货物的保温箱,参赛选手需在最短的

数据库面试题(一)

在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题.下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题.它们按照从易到难的顺序排列.当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下. 你能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗? 你希望听到的答案包括这样一些对象:表格.视图.用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了.如果应聘者不能回答这个

关于如何查找和搜索所有的绑架和逮捕集团的人员的算法和数据结构设计简要说明

这个计划代号   女王陛下 v0.1    拨款 1000元     你来完成啊..帅哥 关于如何精确的查询专业的逮捕和绑架集团的人的算法和数据结构设计 基本特征分析:这些人的心脏是一种专门制造来抓人的心脏,除了心脏以外                         其它器官和功能都和土著自然人一样,甚至显得还优雅一些 这种人造人的特征值:它们所做的任何事情和说的任何语言                  写的任何文章的目的都是为了抓人,这些行为,语言和文章