题目一:

public class testClockwiseOutput {
//顺时针打印一个矩阵 @Test
public void test(){
int[][] num = new int[100][100];
int n = 6;
int count =1; for(int i=0;i<n;i++){
for(int j =0;j<n;j++){
num[i][j]=count++;
}
}
output(num,0,n-1);
} public void output(int[][] num,int start,int end){
if(start>end || end<=0)return;
for(int i=start;i<=end;i++){
System.out.println(num[start][i]);
}
for(int i=start+1;i<=end;i++){
System.out.println(num[i][end]);
} for(int i=end-1;i>=start;i--){
System.out.println(num[end][i]);
}
for(int i=end-1;i>start;i--){
System.out.println(num[i][start]);
} output(num,start+1,end-1);
}
}

题目二:

给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组

//给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组

    @Test
public void test(){
int[] num = {1,2,2,3,4,5,6,7,8,9};
int sum = 7;
findSum(num,sum);
} public void findSum(int[] num,int sum){
int left=0;
int right=0; for(int i=0;i<num.length;i++){
int curSum = 0;
left = i;
right = i;
while(curSum<sum){
curSum += num[right++];
}
if(curSum==sum){
for(int j=left;j<right;j++){
System.out.print(num[j]+" ");
}
System.out.println();
}
}
}

题目三:

//字符数组组成的所有字符串

    @Test
public void test(){
//char[] cs = {'a','b','c','d','e'};
char[] cs = {'a','b','c'};
int length = cs.length;
recursionSwap(cs,0,length);
} public void swap(char[] cs,int index1,int index2){
char temp = cs[index1];
cs[index1]=cs[index2];
cs[index2]=temp;
} public void recursionSwap(char[] cs,int start,int length){
if(start>=length-1){
print(cs);
return;
}
for(int i=start;i<length;i++){
swap(cs,start,i);
recursionSwap(cs,start+1,length);
swap(cs,start,i);
}
} public void print(char[] cs){
for(int i=0;i<cs.length;i++){
System.out.print(cs[i]);
}
System.out.println();
}

题目四:

//数组组成的最小数

    @Test
public void test(){
int[] num={1,5,9,13,442,44,6,21,211};
qsort(num,0,num.length-1);
System.out.println(Arrays.toString(num));
} public void qsort(int[] num,int left,int right){
if(left<right){
int partition = partition(num,left,right);
qsort(num,left,partition-1);
qsort(num,partition+1,right);
}
} public int partition(int[] num,int left,int right){
int partition = num[left];
while(left<right){
while((num[right]==partition || isMBigerThanN(num,num[right],partition)) && left<right){
right--;
}
swap(num,left,right);
while((num[left]==partition || isMBigerThanN(num,partition,num[left])) && left<right){
left++;
}
swap(num,left,right);
} return left;
} public void swap(int[] num,int m,int n){
int temp = num[m];
num[m]=num[n];
num[n]=temp;
} public boolean isMBigerThanN(int[] num,int m,int n){
String num1 = String.valueOf(m);
String num2 = String.valueOf(n); int temp1 = Integer.parseInt(num1+num2);
int temp2 = Integer.parseInt(num2+num1); if(temp1>temp2){
return true;
}
else{
return false;
}
}

题目五:

//子数组最大和
@Test
public void test(){
int[] num = {1,-2,3,10,-4,7,2,-5};
//int[] num = {1,-2,3,10,-4,10,2,-5};
System.out.println(maxSum(num));
} public int maxSum(int[] num){
int curSum = 0;
int curMaxSum = -99999999;
int start = 0;
int end = 0; for(int i=0;i<num.length;i++){
if(curSum<=0){
curSum = num[i];
start = i;
}
else{
curSum += num[i];
}
if(curSum>curMaxSum){
curMaxSum = curSum;
end = i;
}
}
for(int i = start;i<=end;i++){
System.out.println(num[i]);
}
return curMaxSum;
}

题目六:

public class testMinStack {
//自定义栈,min函数得到当前最小值 @Test
public void test(){
MinStack ms = new MinStack();
ms.push(5);
System.out.println(ms.min());
ms.push(6);
ms.push(2);
ms.push(1);
System.out.println(ms.min());
ms.pop();
System.out.println(ms.min());
ms.pop();
System.out.println(ms.min()); }
} class MinStack{
private Stack<Integer> minStack = new Stack<Integer>();
private Stack<Integer> stack = new Stack<Integer>(); public int pop(){
minStack.pop();
return stack.pop();
} public void push(int num){
if(minStack.size()<=0){
minStack.push(num);
return;
}
Integer min = minStack.lastElement();
if(num<min){
minStack.push(num);
}
else{
minStack.push(min);
}
stack.push(num);
} public int min(){
if(minStack.size()<=0){
return -1;
}
return minStack.lastElement();
}
}

题目七:

//找出数组中出现次数大于一半的数

    @Test
public void test(){
int[] num = {1,2,2,2,2,2,2,4,2,4,6,4,2,6,8,2,7,7};
System.out.println(moreThanHaft(num));
} public int moreThanHaft(int[] num){
int result = -1;
int times = 0;
for(int i=0;i<num.length;i++){
if(times==0){
result = num[i];
times++;
}
else{
if(num[i]==result){
times++;
}
else{
times--;
}
}
} return result;
}

题目八:

//判断一个数组是否是另一个栈的出栈顺序

    @Test
public void test(){
int[] num = {1,2,3,4,5};
int[] num1={1,2,3,5,4};
int[] num2={2,1,5,3,4};
int[] num3 = {2,1,5,4,3};
Stack<Integer> s1 = new Stack<Integer>();
Stack<Integer> s2 = new Stack<Integer>();
for(int i=4;i>=0;i--){
s2.push(num3[i]);
} System.out.println(testOrder(num,s1,s2));
} public boolean testOrder(int[] num,Stack<Integer> s1,Stack<Integer> s2){
int length = num.length;
for(int i=0;i<length;i++){
s1.push(num[i]);
while(!s1.isEmpty() && s2.lastElement().intValue()==s1.lastElement().intValue()){
s1.pop();
s2.pop();
}
}
if(!s1.isEmpty()){return false;
}
return true;
}

题目九:

//从扑克牌抽5张牌,0可以为任意数,判断是否是顺子

    @Test
public void test(){
int[] num = {0,1,5,3,2};
System.out.println(check(num));
} public boolean check(int[] num){
//0-13
int[] pai = new int[14];
for(int n : num){
pai[n]+=1;
}
qsort(num,0,num.length-1);
int count = pai[0];
int start = 0;
if(num[0]==0){
start=num[1];
}
else{
start=num[0];
}
for(int i = start;i<=start+5;i++){
if(pai[i]>1)return false;
count += pai[i];
}
if(count == 5)return true;
else return false; } public void qsort(int[] num,int left,int right){
if(left<right){
int partition = partition(num,left,right);
qsort(num,left,partition-1);
qsort(num,partition+1,right);
}
} public int partition(int[] num,int left,int right){
int partition = num[left];
while(left<right){
while(left<right && num[right]>=partition){
right--;
}
swap(num,left,right);
while(left<right && num[left]<=partition){
left++;
}
swap(num,left,right);
} return left;
} public void swap(int[] num,int m,int n){
int temp = num[m];
num[m]=num[n];
num[n]=temp;
}

题目十:

//输出第k个丑数(因子只有2,3,5)

    @Test
public void test(){
findUglyNum(8);
} public void findUglyNum(int index){
int[] num = new int[index];
int next = 1;
num[0]=1;
int index2=0;
int index3=0;
int index5=0; while(next<index){
int num2 = num[index2]*2;
int num3 = num[index3]*3;
int num5 = num[index5]*5; num[next] = getSuitable(num2,num3,num5); while(num[index2]*2<=num[next]){
index2++;
}
while(num[index3]*3<=num[next]){
index3++;
}
while(num[index5]*5<=num[next]){
index5++;
}
next++; }
System.out.println(num[index-1]);
} public int getSuitable(int num2,int num3,int num5){
int s = num2;
if(num3<s){
s = num3;
}
if(num5<s){
s = num5;
}
return s;
}

几个面试经典算法题Java解答的更多相关文章

  1. 面试经典算法题集锦——《剑指 offer》小结

    从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...

  2. 10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:   ...

  3. [经典算法题]寻找数组中第K大的数的方法总结

    [经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26   字体:[大 中 小] 打印复制链接我要评论   今天看算法分析是,看到一个这样的问题,就是在一堆数据 ...

  4. 经典算法题每日演练——第十七题 Dijkstra算法

    原文:经典算法题每日演练--第十七题 Dijkstra算法 或许在生活中,经常会碰到针对某一个问题,在众多的限制条件下,如何去寻找一个最优解?可能大家想到了很多诸如“线性规划”,“动态规划” 这些经典 ...

  5. 经典算法题每日演练——第十六题 Kruskal算法

    原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...

  6. 经典算法题每日演练——第十四题 Prim算法

    原文:经典算法题每日演练--第十四题 Prim算法 图论在数据结构中是非常有趣而复杂的,作为web码农的我,在实际开发中一直没有找到它的使用场景,不像树那样的频繁使用,不过还是准备 仔细的把图论全部过 ...

  7. 经典算法题每日演练——第十一题 Bitmap算法

    原文:经典算法题每日演练--第十一题 Bitmap算法 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美, 但是在特定的场 ...

  8. 经典算法题每日演练——第八题 AC自动机

    原文:经典算法题每日演练--第八题 AC自动机 上一篇我们说了单模式匹配算法KMP,现在我们有需求了,我要检查一篇文章中是否有某些敏感词,这其实就是多模式匹配的问题. 当然你也可以用KMP算法求出,那 ...

  9. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法

    原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为 ...

随机推荐

  1. elaticsear no [query] registered for [filtered] 错误

    1.问题描述 执行语句: GET /megacorp/employee/_search { "query" : { "filtered" : { "f ...

  2. VitualBox安装linux记录

    下载镜像 CentOS 7镜像下载 阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/ VirtualBox安装linux https://ww ...

  3. WordPress更新提示无法创建目录的解决方案

    上一篇我们说到无法连接FTP服务器,我们已经完美的解决了,然后...发现...还是无法更新,啥情况??? 提示为无法创建目录 原因是执行更新程序的是www用户, 解决方案如下: 需要把插件或主程序下载 ...

  4. LVS负载均衡下session共享的实现方式-持久化连接

    之前简单介绍LVS负载均衡的高可用方案实施,下面详细说明LVS的session解决方案: LVS算法中,SH算法可以实现将同一客户端的请求总是发送给第一次指定的RS,除非该RS出现故障不能再提供服务. ...

  5. Git分支管理的策略梳理

    当下最流行的版本管理系统应该是非Git莫属.相比同类软件,Git有很多优点,其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一 ...

  6. MFS+Keepalived双机高可用热备方案操作记录

    基于MFS的单点及手动备份的缺陷,考虑将其与Keepalived相结合以提高可用性.在Centos下MooseFS(MFS)分布式存储共享环境部署记录这篇文档部署环境的基础上,只需要做如下改动: 1) ...

  7. 个人作业——final

    一 . 对M1M2的一个总结 我特别感谢我们组的PM.以前我觉得女生学计算机这个专业,跟男生比差太远了.总觉得我们女生就是上上课写写作业考考试还行,但是一到开发什么项目啊,实战之类的,总觉得自己的能力 ...

  8. Maven入门指南④:仓库

    1 . 仓库简介 没有 Maven 时,项目用到的 .jar 文件通常需要拷贝到 /lib 目录,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难于管理.Maven 使用一个称之为仓库的目录,根据构 ...

  9. (Alpha)Let's-版本测试报告

    测试中发现的Bug 我们在测试之前发布了新的版本Version1.1,发布新版本的同时也带来一些问题: 修复了上传图片画质问题的Bug 修复了搜索功能的部分Bug 增加了下拉刷新的功能 修复了部分界面 ...

  10. SpringMVC一例 是否需要重定向

    在ASP.NET MVC下: return view("List") 和 return RedirectToAction("List") 百度知道的最佳答案: ...