【算法题】分苹果 n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。 输入描述: 每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <=
【智力题】 4红牌、4蓝牌算法实现 有4 张红色的牌和4 张蓝色的牌,主持人先拿任意两张,再分别在 A、B、C 三人额头上贴任意两张牌,A、 B、C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A 说不知道,B 说不知道,C 说不知道,然后 A 说知道了。如何推理,A 是怎么知道的。如果用程序,又怎么实现呢?推理过程推理过程比较复杂,没有代码好理解代码思路:首先是三个人的第一反应都是不知道,所以任意两
【算法题】有趣的排序 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作: 任取数组中的一个数然后将它放置在数组的最后一个位置。 问最少操作多少次可以使得数组从小到大有序? 输入描述: 首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000) 输出描述: 输出一个整数表示最少的操作次数。
【算法题】生日礼物 题目描述BF的生日快到了,这一次,小东决定为BF送一份特别的生日礼物为其庆生。作为高智商中的佼佼者,BF在国外求学,因此小东无法与之一起庆生。小东计划送一个生日卡片,并通过特别的包装让BF永远难忘。她决定把卡片套装在一系列的信封A = {a1, a2, …, an}中。小东已经从商店中购买了很多的信封,她希望能够用手头中尽可能多的信封包装卡片。为防止卡片或信封被损坏,只有长宽较小的信封能够装入
【算法题】下厨房 牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。 输入描述: 每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。 输出描述: 输出一行一个数字表示完成所有料理需要多少种不同的材
【面经笔记】线程、多线程 - 死锁、读写、消费者问题、TLS【续2】 死锁:定义:一组相互竞争资源或进行通信的进程间的永久阻塞。死锁条件:互斥、占有并等待、不可剥夺、(循环等待)死锁预防:解除死锁的必要条件,排除发生死锁的可能性。互斥:不可禁止占有并等待:要求进程一次性请求所有资源,阻塞直到所有请求满足不可剥夺:进程若进一步请求被拒绝,则需释放最初占有的资源;优先级高的进程可以抢占优先级低的进程资源。死锁避免:允许三个发生死锁的条件,但是通过明智的策略,确
【面经笔记】软件测试相关问题 为什么选择测试这行?答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更全面。请问功能测试和性能测试的区别是什么?答:1)测试目的:功能测试:检测实际软件的功能是否符合用户需求,测功能是不是全部实现,某个实现是不是有BUG。主要为了发现以下几类错误:A、是否有不正确或遗漏的功能?B、功能实现是否满足用户需求和系统设计的隐藏需求?C、能否正确接收输入?能否正确输出结果?性
修改Ubuntu终端中,Vim插入模式下光标实现为竖线状 Change cursor shape in different modesFor the Gnome-Terminal (version 2.26)EditThis makes your cursor change in all open terminals. Upgrade your terminal and use the version above instead.if has("auto
【面经笔记】TCP如何保证可靠传输 TCP协议如何保证可靠传输参考1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。2、数据校验:TCP报文头有校验和,用于校验报文是否损坏3、数据合理分片和排序:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分片,把数据报分成若干片,是的每一片都
【算法题】全排列,字典序 参考全排列:/* * 递归输出序列的全排列 */void FullArray(char* array, size_t array_size, unsigned int index){ if(index >= array_size) { for(unsigned int i = 0; i < array_size; ++i) {
【算法题】最小生成树 参考#include <iostream>#include <vector>using namespace std;#define max 99999int func(vector<vector<int>>& map){ int sum(0); int n = map.size(); vector<int> visited(n,0); vector<int> lo
【算法题】博弈论:数组选数字 给定一个数组,两个人A、B依次从数组最左端选择一个或者两个数字,最后选择的数字之和较大者赢。假设两个人都足够聪明,A先选,给定数组,判断A、B谁能赢。分析: dp[i]表示当前数组为Array[i]…Array[n]时,当前选择的人最多能从数组中选出多少值。则dp[i]=max⎧⎩⎨sum[i]−dp[i+1]sum[i]−dp[i+2]dp[i] = max\begin{cases}sum[i
【算法题】博弈论:leetcode 486 数组取数 参见【题目】:给定一个正整数数组,选手1从数组的头部或者尾部选择一个数,选手2从剩下部分的头部或尾部选择一个数,循环往复,直到该数组中的数都被取完。选手1、2都足够聪明。判断选手1取的数的和值是否大于选手2.【思路】:dp[i][j]dp[i][j]表示原数组中从i到j的这么多数中,按照游戏规则,某个玩家所能获得的最大分数。 dp[i][j]=max(sum[i][j]−dp[i+1][j],
【算法题】神奇数 东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另外一组数字的和,我们就将这个数称为神奇数。例如242就是神奇数,我们能够将这个数字分成两组,分别是{2,2}以及{4},给定区间[l,r],统计这个区间有多少个神奇数,请你来帮助他。首先判断数组能否被平分,即数组分割问题,dp[i][j]dp[i][j]表示数组前 ii 个数字能否求和得到 jj 则dp[i][j
【算法题】触宝2018编程题二 在平面上有N个点,他们有各自的速度向量。现在我们给出时刻0时他们的位置由于速度不变,所以解函数是个凹函数,凹函数的梯度是左边小于0,右边大于0。可以根据梯度,使用二分查找梯度为0 的位置。题目没有限制t的范围,注意初始查找的区域设定:不能太大,如果太大,会造成计算距离溢出,而且会计算过程中会发生精度丢失,导致梯度计算错误。不能太小,如果太小,区域很可能没有包含解的位置试了半天,99999999999