致精团队笔试题2道

笔试题——团队活动分组 现有n个人,每个人有一个唯一的数字作为标签,标签数字的范围:1~n;为了统计分组情况,有人提议有分组意愿的人提交一个数字,表示其会和以该数字为标签的人分到一组。 现在知每个人的选择,您能统计出一共有多少个小组吗? 注意:1和2一组,2和3一组,那么1,2,3属于一组。默认为自己一定和自己一组。 输入: 第一行:n(表示n个人,1 第二行:n个数(1 输出: 输出一个 阅读详情
 
A、两个数组,一个长度n,一个长度2n但是只有前n个数字有效。他们都是排序的。现在要把第一个数组合并到第二个数组里面并且使得结果仍然保持排序,求O(n)算法
void merge(int* a , int* b , int n);
 
B、已知两个单向链表,尾部是共享的,看起来是Y字形,现在给出两个链表头,求出相交的第一个节点,要求O(n)
struct node{node* next;};

      node* find_conflict(node* a , node* b);                                                                                                     

致精团队给出的思路:图示如下,题A

A=1 3 5

B=2 6 10 X X X

init:

 A=1 3 5

            ^lastA
 B=2 6 10 X X X
             ^lastB  *lastR
1:
 A=1 3 5
            ^
 B=2 6 X X X 10
          ^        *
2:
 A=1 3 5
            ^
 B=2 X X X 6 10
      ^         *
3:
 A=1 3 X
         ^
 B=2 X X 5 6 10
       ^    *
4:
 A=1 X X
      ^
 B=2 X 3 5 6 10
       ^ *
5:
 A=1 X X
    ^
 B=X 2 3 5 6 10
 ^ *
6:
 A=X X X
 ^
 B=1 2 3 5 6 10
 ^*
想法:此答案来源于merge sort的每个迭代的最后一步
程序如下:
#include <iostream>
#include <string>
using namespace std;
void sort(int* A , int* B , int lenA)
{
 int indexLastA = lenA - 1;//数组A的最后一个有效元素下标
 int indexLastB = lenA - 1;//数组B的最后一个有效元素下标
 int indexLastBB = 2*lenA - 1;//数组B的最后一个元素下标
 //每次拿出A和B的最后一个没被放入结果的元素做比较,将大的那个放入结果的最后一个空闲位置
 while (indexLastBB >= 0)
 {
  if (indexLastA >= 0)
  {
   if (indexLastB >= 0)
   {
    if (A[indexLastA] > B[indexLastB])
    {
     B[indexLastBB--] = A[indexLastA--];
    }
    else
    {
     B[indexLastBB--] = B[indexLastB--];
    }
   }
   else
   {
    B[indexLastBB--] = A[indexLastA--];
   }
  }
  else
  {
   if (indexLastB >= 0)
   {
    B[indexLastBB--] = B[indexLastB--];
   }
  }
 }
}
int main()
{
 int A[3] = {1,3,5};
 int B[6] = {2,6,10};
 int len = sizeof(A)/sizeof(A[0]);
 cout<<"Array A:";
 for (int i=0; i<len; i++)
 {
  cout<<A[i]<<' ';
 }
 cout<<endl<<"Array B:";
 for (int j=0; j<len; j++)
 {
  cout<<B[j]<<' ';
 }
 sort(A,B,len);
 cout<<endl<<"After sort Array B:";
 for (int k=0; k<2*len; k++)
 {
  cout<<B[k]<<' ';
 }
 return 0;
}
题B图示:

图示:

假设a b如下

A:1 2 3 4

          7 8 9 10

B:    5 6

链表A=1 2 3 4 7 8 9 10

链表B=5 6 7 8 9 10

第一个交点明显是7。根据以上算法

 

第一步:算出lenA=8

第二步:算出lenB=6

第三步,由于lenA>lenB,于是让A跳过lenA-lenB个节点,此时A指向3

第四步,依次比较:

   5!=3

   6!=4

   7==7,返回7
程序如下:
#include <iostream>
#include <malloc.h>
using namespace std;
struct List
{
 int Number;
 struct List *Next;
};
typedef struct List Node;
typedef Node *Link;
int LA[] = {1,2,3,4,7,8,9,10};
int LB[] = {5,6,7,8,9,10};
void Free_List(Link Head)//释放链表
{
 Link Pointer;
 while (Head != NULL)
 {
  Pointer = Head;
  Head = Head->Next;
  free(Pointer);
 }
}
void Print_List(Link Head)//打印链表
{
 Link Pointer;
 Pointer = Head;
 while(Pointer != NULL)
 {
  cout<<Pointer->Number<<' ';
  Pointer = Pointer->Next;
 }
 cout<<endl;
}
Link Create_List(Link Head,int *L,int Max)//创建链表
{
 Link New;
 Link Pointer;
 int i;
 Head = (Link)malloc(sizeof(Node));
 if (Head == NULL)
 {
  cout<<"Memory allocate Failure!"<<endl;
 }
 else
 {
  Head->Number = L[0];//定义首节点
  Head->Next = NULL;
  Pointer = Head;
  for (i=1; i<Max; i++)
  {
   New = (Link)malloc(sizeof(Node));
   New->Number = L[i];
   New->Next = NULL;
   Pointer->Next = New;//将新节点串连在原链表尾端
   Pointer = New;//链表尾端节点为新节点
  }
 }
 return Head;
}
int Link_length(Link Head)//求链表长度
{
 int len = 0;
 Link Pointer = Head;
 while (Pointer)
 {
  len++;
  Pointer = Pointer->Next;
 }
 return len;
}
int Find_conflict(Link A , Link B)
{
 int lenA = Link_length(A);
 int lenB = Link_length(B);
 if (lenA > lenB)//跳过比较长的链表的|lenA-lenB|个节点
 {
  while((lenA--) > lenB)
  {
   A = A->Next;
  }
 }
 else
 {
  while ((lenB--) > lenA)
  {
   B = B->Next;
  }
 }
 while (A)//一个一个配对比较,如果发现相等则返回节点。此时A和B一样长
 {
  if (A->Number == B->Number)
  {
   return A->Number;
  }
  else
  {
   A = A->Next;
   B = B->Next;
  }
 }
 return 0;//找不到交点,返回空
}
int main()
{
 Link Head = NULL;
 Link Head1 = NULL;
 Link Head2 = NULL;
 Head1 = Create_List(Head1,LA,sizeof(LA)/sizeof(LA[0]));
 Head2 = Create_List(Head2,LB,sizeof(LB)/sizeof(LB[0]));
 if (Head1 != NULL && Head2 != NULL)
 {
  cout<<"Link A and Link B :"<<endl;
  Print_List(Head1);
  Print_List(Head2);
 }
 cout<<"The first conflict element is : "<<Find_conflict(Head1,Head2)<<endl;
 Free_List(Head1);
 Free_List(Head2);
 return 0;
}
【第113期】聊聊网易某工作室的策划笔试题 我是酱油,这是第113期文章 后台收到一位网友消息,这位网友参加了网易某工作室的策划笔试,过后凭印象复述了几题,希望借公众号分享给其他的伙伴。 1、题目广泛:古文、电影、二次元…应有尽有 网友:游戏和动漫相关的写了不少,古文也还行,不过涉及历史时间和人物的都不太会,比如有一题甚至要区分汉书和后汉书的记载时间,看得少,汗颜。 酱油:作为一个工科生,历史也是我的弱项,笑cry。(正经脸)所以我还是很佩服通过校招入职的策划同学,有这能力,敢情考公务员也不在话下了,为民服务工作考虑一下?把游戏策划岗位让给咱们 阅读详情

相关推荐

软件测试笔试题

选择题 一、数量关系 1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,照这样计算,当甲到9层时,乙到( D )层 A.5 B.6 C.7 D.8 2、有一份选择题试卷共6个小题,其得分标准是:一小题答对得8分,答错得0分,不答得2分,某位同学得了20分,则他( D ) A.至多答对一题 B.至少有三个小题没答 C.至少答对三个小题 D.答错两小题 3、有只蜗牛要...

qq_40018197的博客 2305

Zingfront线_技术笔试题2018版B(最最最新版本)

线是由乐于接受挑战的坚实团队,我们来自顶级公司,喜欢突破,渴望挑战,热衷于实践和创造。 一个公司的真实笔试题,希望对你们有帮助!

阿里校招 数据分析师 笔试题

2015年8月19日,阿里校招数据分析师笔试题。共计21题(貌似统计漏了一题,应该是单选少了一题,凑合看吧),选择题每个人的都不一样,问答题是一样的。暂时没有答案,希望对大家有用。 单选题: 1观测宇宙中单位体积内星球的个数,属于什么分布: A学生分布B泊松分布C正态分布D二项分布   2一些关于数据挖掘说法是正确的 A数据挖掘是万能的 B如果你建立了一个database,那

看见他人 看见自己的专栏 2万+

Zingfront线笔试题2018版A新.pdf

实际公司面试笔试题,亲测,python岗位,涉及一些算法等的题目

团队之间通知传递

某一笔试题。 主要思路是用到一个队列和两个hashset来模拟一个传染的过程。 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); //人数

Lyuwalle的博客 329

编写函数int stat(int a[],int n,int c[][2])

编写函数int stat(int a[],int n,int c[][2])。    a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。 #include int s

whmnirvana的博客 740

今日头条的一条笔试题

今日头条的一基于贪婪思想的笔试题 一。 题目介绍 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每题的难度系数。一场考试包含3开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3题能满足下列条件:a<= b<= cb -

lccla120712的博客 5325

php笔试题 GPT改写

PHP笔试题通常是指在招聘过程中用来评估应聘者对PHP及相关技术掌握程度的一系列问题或任务。这些问题可能覆盖从基础知识到高级特性等多个层面,旨在测试候选人解决问题的能力和技术深度。

chatgpt001的博客 965

PHP高级程序员笔试题――我的一点见解

这不仅仅是让你背诵Redis或Memcached的使用方法,而是希望你能够根据自己的项目需求,结合这些缓存系统的特性,设计出一个既稳定又高效的缓存方案。对于这样的题目,我认为一个好的答案应该是能够详细阐述自己的设计思路,包括使用哪些PHP函数或类库、如何处理异常情况、如何保证系统的安全性等等。因此,在面对笔试题时,我们应该保持冷静和自信,充分发挥自己的优势,展现出自己的实力。在我看来,一个优秀的PHP高级程序员不仅仅需要掌握扎实的PHP技术基础,还需要具备良好的编程习惯、逻辑思维能力和解决问题的能力。

z123573z的博客 276

WEB前端开发笔试题2

腾讯WEB前端开发笔试题 前段时间在网上把简历更新了一遍,陆续接到一些公司的面试通知的电话,有一天下午的时候,接到腾讯拍拍网打过来的电话,说招聘WEB前端开发工程师,在电话里简单的面试了一番,就给了我一次去腾讯面试的机会,那是的心情是格外的高兴,因为这是我梦寐已久的腾讯公司

莱茵金属 1748

PHP笔试题:考量编程基础与思维的双重试炼

这些题目往往没有固定的答案,而是需要求职者根据题目要求,结合自己的编程知识和经验,提出合理的解决方案。通过这类题目,企业可以了解求职者的思维方式和解决问题的能力,从而判断其是否具备成为一名优秀PHP开发者的潜力。通过笔试,企业可以初步判断求职者是否具备扎实的编程基础,能否胜任后续的编程工作。你知的对于求职者而言,笔试题也是自我检验的良机,可以发现自己在基础知识方面的薄弱环节,为后续的学习和提高指明方向。对于PHP开发者而言,PHP笔试题不仅是对其编程基础知识的检验,更是对其逻辑思维和问题解决能力的考量。

2401_86114608的博客 481

java笔试题_一简单的 Java 笔试题,但值得很多人反思

专注于Java领域优质技术,欢迎关注作者:匿蟒前言面试别人,对我来说是一件新奇事,以前都是别人面试我。我清楚地知,我在的地域与公司,难以吸引到中国的一流软件人才。所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的、基础的。我只要最终给Leader一句“这个人技术还行/很好/非常好”,就行了。至于其它能力、综合水平,由别人把关。为此,在挑选唯一的一笔试题时,我特别地上心。首先,我不...

weixin_39878760的博客 874

新浪php笔试题 能写作

为了帮助大家更准确地把握住考试的核心内容,本节将挑选几个常见的关键词汇进行简要说明。通过以上内容的学习,相信你已经对如何准备新浪PHP笔试有了较为全面的认识。记住,成功来自于不断的积累与努力,只要坚持下去就没有什么是不可能实现的目标。未来随着技术的发展,新的挑战也必将不断涌现,唯有持续学习才能让自己始终保持竞争力。

chatgpt001的博客 754

腾讯实习生笔试题

转自 http://baodian.yjbys.com/bishi/4-9.html 2013腾讯实习生笔试题  一、 单项选择题 1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项() Int a1=x+y-z; int b1=x*y/z; Int a2=x-z+y; int b2=x/z*y; Int c1=x Int c2=x>>z A) a1

ThirstyBlue的专栏 1447

2016年富士康技术笔试题解析与指导

本章将带您回顾富士康2016年的笔试概况,包括考核目的、题型结构以及考核特点,帮助即将参加类似技术笔试的读者有一个全面的了解和准备。常见的数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、栈和队列等,而非线性结构包括树、图等。每种数据结构都有其特定的用途和优势,了解和掌握这些数据结构对解决实际问题至关重要。数组(Array):数组是一种线性数据结构,它可以在连续内存中存储固定大小的数据项序列。数组的操作包括访问、插入和删除元素。链表(Linked List

weixin_42613017的博客 853

某游戏公司的部分笔试题

前几日某游戏公司的笔试题部分 部分不太记得了 大公司 项目经理人不错 面试的结果是建议我不要去做他们那个项目的维护 当然 组后还是决定吧这些笔试题写一下 鼓励下自己,潜心修炼 题目1:   f( int x ) { x = x+1; f2(a); return x; } f2( int a ) { a = a*2; } 问 x = 1, a = 2 函数传入值和传

whbzealot的专栏 793
上一篇: 《编程珠玑》笔记
下一篇: 《Python核心编程》第2章 习题
birdzb
博客等级 码龄22年 53粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值