【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧
找工作时候一般需要准备的算法题目类型,其实参考leetcode和poj或者剑指offer基本能够摆平大部分的题目了
1.图的遍历,BFS、DFS;
2.递归的回溯剪枝;
3.树的建立和遍历;
4.状态的二进制表示,如一列开关的状态,图某行的开关状态。
数据结构:
1.图的表示:邻接矩阵、邻接表(比如:使用数组表示);
2.队列(BFS用,比如使用数组表示);
3.链表,可使用结构体数组表示;
POJ上类似难度的题目:1011(DFS+回溯剪枝,地址:http://poj.org/problem?id=1011),
1014(DFS),1256(回溯剪枝),1753(棋盘状态用16位二进制数表示)
2312(图的遍历),2531(DFS),3278(BFS穷举),3984(图的遍历,DFS或BFS)。
如果对解题方法有疑问,可以百度搜索:“poj + 题号”,如“http://www.baidu.com/baidu?wd=POJ+1011”。
1.穷举法题目例子
首先这个题目是找到方阵中,step = n的特定环的最大值:
只要穷举法就ok,写这个题目需要回顾两点,1,模仿poj的标准输入输出。2.二维数组传值,需要降维,这块下标的计算
样例输入:
2
4 3
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
3 3
0 0 0
0 0 0
0 0 0
输出:
92
0
// KDonuts.cpp : 定义控制台应用程序的入口点。
// #include <stdio.h>
#include <malloc.h> /* To read numbers int n;
while(scanf("%d", &n) != EOF)
{
...
} To read characters int c;
while ((c = getchar()) != EOF)
{
...
} To read lines
char line[1024];
while(gets(line))
{
...
}
*////// //只是从当前x,y 坐标的一个环的sum
int getSum(int startX,int startY,int* array,int step,int nlength)
{
int sum = 0; for (int i = startY;i < startY+step;i++)
{
sum = sum + *(array + startX*nlength + i);
sum = sum + *(array + (startX +step-1)*nlength +i);
} for (int j = startX; j< startX +step - 2;j++)
{
sum = sum + *(array+(j +1)*nlength + startY);
sum = sum + *(array+(j +1)*nlength+ startY + step -1);
} return sum;
} int getMax(int nlength,int step,int* array )
{
int maxsum = 0; for (int i = 0;i<=nlength-step;i++)
{ for (int j = 0;j<=nlength-step;j++)
{
int tmp = getSum(i,j,array,step,nlength);
if (maxsum<tmp)
{
maxsum = tmp;
}
}
}
return maxsum;
} int main()
{ freopen("sample.in", "r", stdin);
freopen("sample.out", "w", stdout); /* 同控制台输入输出 */ int mainIndex = 0;
scanf("%d",&mainIndex); for (int i = 0; i < mainIndex;i++)
{
int step = 0;
int N = 0;
scanf("%d %d",&N,&step);
// 下面申请内存时候要用sizeof不然free时候会算错导致堆出错
int *array = (int*)malloc(sizeof(int)*N*N);
for (int j = 0;j<N*N;j++)
{
scanf("%d",array+j);
}
printf("%d\n",getMax(N,step,array)); free(array);
} fclose(stdin);
fclose(stdout); return 0;
}
2.各大公司最常考的题目:关于单链表的逆置
// LinkListReverse.cpp : 定义控制台应用程序的入口点。
// #include<stdio.h>
//#include<stdlib.h>
#include <malloc.h>
/*链表节点定义*/
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode, *LinkList; //定义节点,头指针类型名 /*尾插法创建单链表*/
void Create_LinkList_B(LinkList &L)
{
int x, cycle = 1;
Lnode *p, *s;
L=(LinkList)malloc(sizeof(Lnode)); //生成头结点
L->next = NULL;
p=L;
while(cycle) //循环接受输入节点数据,-1结束输入
{
printf("x = ?\n");
scanf("%d", &x);
if(x != -1)
{
s=(Lnode *)malloc(sizeof(Lnode)); //生成新节点
s->data = x;
p->next = s; //把新节点插入链表尾部
p = s; //p指针再次指向尾节点
}
else
{
cycle = 0; //输入-1,改变循环变量,不接受新节点
} }
p->next = NULL;
} /*单链表的逆置,针对有头节点的情况 ,没有头节点的情况另外补上一个头结点*/
void Reverse_LinkList(LinkList &L)
{
if( (NULL==L)||(NULL==L->next) )return ; //边界检测
Lnode *pre, *q;//pre节点一直作为去掉头结点的链表的首节点,q作为保存pre的临时节点
pre = L->next; //P指向链表第一个元素
L->next = NULL; //断开头结点与链表
while(pre != NULL)
{
q = pre;
pre = pre->next;
q->next = L->next; //相当于前插法构建新的链表,和原来的相反
L->next = q;
}
}
//单链表逆置的递归写法:
void ReverseList(LinkList& pCur,LinkList& ListHead)
{
if( (NULL==pCur)||(NULL==pCur->next) )
{
ListHead=pCur;
}
else
{
LinkList pNext=pCur->next;
ReverseList(pNext,ListHead); //递归逆置后继结点
pNext->next=pCur; //将后继结点指向当前结点。
pCur->next=NULL;
}
} /*打印单链表*/
void Print_LinkList(LinkList &L)
{
Lnode* p;
p = L->next; //L是头指针,p指向第一个节点,开始打印
while(p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
} /*测试函数*/
int main()
{
LinkList H; //声明头指针
Create_LinkList_B(H);
printf("现在开始打印链表\n");
Print_LinkList(H); printf("-----逆置之后的链表-----\n"); Reverse_LinkList(H);
Print_LinkList(H);
printf("-----逆置之后的链表-----\n");
ReverseList(H,H);
Print_LinkList(H);
return 0;
}
这个哥们的代码基本可以作为标准答案了:
http://blog.csdn.net/heyabo/article/details/7610732
【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧的更多相关文章
- 找工作笔试面试那些事儿(8)---常问的CC++基础题
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...
- IT行业歧视40岁以上人群为找工作还要谎报年龄[转]
IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...
- java自学找工作经历
断断续续的,折腾了7个多月,学完了在网上购买的培训机构J2EE的全套课程.期间各种蛋疼看另一篇博客 http://www.cnblogs.com/work396/p/6791488.html 直接说找 ...
- Java自学如何找工作
今天聊一下可能大多数人都关注的问题“自学Java如何找工作”那么首先你就要明确现在招聘Java开发的基本要求是什么?下面我们来看一下招聘网站上面的要求,在这里我只随便找了一个比较全面的要求,自己可以去 ...
- [找工作] 2019秋招|从春招到秋招,Java岗经验总结(收获AT)
转自(有更多) https://blog.csdn.net/zj15527620802/article/month/2018/10 前言 找工作是一件辛酸而又难忘的历程.经历过焦虑.等待.希望,我们最 ...
- 一个Android开发妹子的找工作心酸史
阿里:实习二面被KO 1,人生接到的第一个电话面试来自大家都说好的阿里,心情激动,说话颤抖,本以为没有戏,然而第二天接到了二面的电话有点小激动.然后就是被ko了,死的原因很简单,那时候单纯的自己什么都 ...
- 【招聘】滴滴滴~ i春秋内推直通车来咯,帮你找工作!
凑是这么简单粗暴,i春秋冬日特享福利!虽然金九银十已经过去,但素想换工作想找工作的小哥哥小姐姐看过来! [职位方向]渗 透 测 试.代 码 审 计.安全开发.病毒分析.风险控制.安全运维.....任何 ...
- 如何正确学习web前端流程以及如何找工作
解释一下web前端工作是做啥的,Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/Flash等各种Web技术进行客户端产品的开发.完成客户端程序(也就是浏览器端)的开发 ...
- 苦逼三流小公司程序员这半年找工作经历(3)——选择offer
本文按照企业规模.性质.规模,分成三类,点评一下遇到的这些公司.也算是为半年找工作经历的一个总结. 1,三流小公司 公司规模类似于笔者跳槽前所在企业,性质有外商独资.合资,当然大多数都是民营企业,规模 ...
随机推荐
- 【ZOJ 3609】Modular Inverse 最小乘法逆元
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x ...
- 【NOIP2016】换教室
题目描述 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 i ( 1≤ i≤n)个时同段上, 两节内容相同的课 ...
- bzoj 4710: [Jsoi2011]分特产
Description JYY 带队参加了若干场ACM/ICPC 比赛,带回了许多土特产,要分给实验室的同学们. JYY 想知道,把这些特产分给N 个同学,一共有多少种不同的分法?当然,JYY 不希望 ...
- iOS 隐藏导航条分割线
// 导航条分割线 @property (nonatomic, strong) UIView *navSeparateView; // 获取导航条分割线 UIView *backgroundView ...
- 数据结构 单链表&顺序表
顺序表: 一般使用数组(C语言中的数组采用顺序存储方式.即连续地址存储)来描述. 优点:在于随机访问元素, 缺点:插入和和删除的时候,需要移动大量的元素. 链表: 优点:插入或删除元素时很方便,使用灵 ...
- left join 连表时,on后多条件无效问题
http://www.cnblogs.com/guixiaoming/p/6516261.html left join 连表时,on后多条件无效问题 最近开发素材库项目,各种关系复杂的表,一度6张表的 ...
- 脱离文档流两操作,float和position:absolute的区别
文档流:将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,块状元素独占一行,内联元素不独占一行: CSS中脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离 ...
- 优化Webpack打包速度
1. Webpack 可以配置 externals 来将依赖的库指向全局变量,从而不再打包这个库,比如对于这样一个文件: import React from 'react'; console.lo ...
- 使用Fiddler改变线上js文件的引用路径
一般的项目开发都是先在本地环境开发,测试环境中完成测试,最后再提交到线上环境. 但是由于版本构建工具有时出现bug或者一些缓存的因素导致测试环境代码可能和线上不一样,这是多么蓝瘦的事情.此处说的是在原 ...
- C# 制作屏保(图片位置随机变化)
最近无所事事,闲着无聊,在网上翻看资料时碰巧看到了屏保制作,根据大神的思路也理解到屏保也不是很难.因此根据我自己的理解,动手谢了一个屏保. 首先,打开VS2010创建一个Windows窗体应用程序,名 ...