
那些年我做过的编程题
文章平均质量分 55
shashakang
这个作者很懒,什么都没留下…
展开
-
网易编程—工作安排
题目介绍:现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作)。现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去。如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划。 笔试时原创 2017-04-11 17:15:11 · 1286 阅读 · 0 评论 -
网易笔试—动态规划
题目虽然不难,但是初看也没用多少思路,后来看了别人的代码,虽然 代码很短,只有简单几行代码,但是也看了好一会儿才明白,动态规划真的很有用。 贴上题目的链接,网易实习生的第一道编程题,最难的部分是动态规划部分,代码如下: for(int i = 0 ; i < n ; i ++) for(int j = sum/2 ; j >= arr[i] ; --j)原创 2017-04-04 18:07:42 · 1220 阅读 · 0 评论 -
二分查找
上次面试栽到了二分查找,最简单的问题上,以至于一直不想面对,但是不论怎样,还是要不断成长,不断提升,不会的东西就要不断提升,才能得到真正想要的东西。 好啦,回归正题,二分查找又叫二分查找,它的前提是线性表中的记录必须是有序的,通常常见的就是由小到大排序,查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左原创 2017-04-24 18:45:56 · 346 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数字
题目为一个数组中除了两个数字以外,其它数字都出现过两次,怎么样找出这两个数字呢? 想这个问题时,因为强调了出现两次和一次,其实是可以想到异或算法的,异或算法就是两个数相同为0,不同为1,那么这道题可以先对输入数据整体求一个异或,那么根据异或结果可以将数组分为两个部分,比如说异或结果为0010,则可以根据倒数第二位为1和不为1将数据分为两组,这两组中分别含有一个不重复的数字,对每一组分别做异或,就原创 2017-04-24 22:57:59 · 282 阅读 · 0 评论 -
剑指offer-二维数据的查找
一个二维数组,每一行从左向右,从上到下都是递增数列,要求输入一个数,判断数组中是否有该数,比如以下数组查找7. 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 这个题的思路其实可以从这样从右上角的数字开始找,那么第一个数是9,比7大,那就删除这一列,接下来左移一个为8也比7大,在左移,找到2,那就开始在这列找,行数不断增加,最终找到了7. bool fin原创 2017-04-25 09:29:41 · 236 阅读 · 0 评论 -
剑指offer-字符串替换
实现一个函数,将字符串中的空格都替换成“%20”,比如输入“we are happy”,则输出变为“we%20are%20happy” 这道题的解题思路我们可以从前往后复制,遇到空格就给它替换成要求的,但是这样就有的字符就移动了多次,所以可以从后往前去复制,第一步先统计有多少个空格,那就知道了应该往后移动多少个位置,接下来可以定义两个指针。 void ReplaceBlank(char s原创 2017-04-25 12:01:30 · 322 阅读 · 0 评论 -
剑指offer-从尾到头打印链表
输入是一个链表,需要从尾到头打印链表,如果说不改变链表的顺序,那么链表肯定是从头向尾遍历嘛,其实可以用一个栈的结果,将数据都压入栈中,压完了再输出就完成了从尾到头打印链表。 当然从尾到头打印链表前,先科普一个构建单链表的方法哈。两点节点不断加入 Node *creatList(Node *pHead) { Node *p1; Node *p2; p1 = p2 = (Node *)ma原创 2017-04-25 12:10:41 · 442 阅读 · 0 评论 -
字符串逆转
只将字符串内部逆转,比如说输入为we are girl,结果变为ew era lrig。 最初写的程序为 int main() { string a; int beg = 0; int end = 0; getline(cin, a); for (int i = 0; i < a.size(); i++) { if (a[i] == ' ') { end = i-1;原创 2017-04-25 16:14:16 · 366 阅读 · 0 评论 -
两个排好序的数组找第k大
这个问题暂时做了两个思路,第一种从头到尾不断相加,因为两个数组都是排好序的,那就从头往后,直到相加的结果为第k 个,代码为 int findKthSmall(vector &a, vector &b, int k) { int aindex = 0, bindex = 0; int alen = a.size(), blen = b.size(); //cout<<alen<<'\t'<<原创 2017-04-25 21:30:08 · 345 阅读 · 0 评论