/**
* 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从
* 出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为
* 止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java 实现。
*/
@org.junit.Test
public void test3() {
//初始化整个队伍
int[] peos = new int[9];
for (int i = 1; i < peos.length+1; i++) {
peos[i-1] = i;
}
System.out.println(Arrays.toString(peos));
//出队步长
int m = 2; //出队记录
int[] out = new int[9]; int n = 0;
for (int i = 0; peos.length != 0; i++) {
//每次出队时,当前序号。
n = m + n - 1;
while (n >= peos.length) {
// 如果n下标超过数组长度,就从头开始再算。
n = n - peos.length;
}
out[i] = peos[n];
/*
* 将数组n项后面的元素全部前移一项。可以替换为System.arraycopy方法。
* System.arraycopy(peos, n + 1, peos, n, peos.length - 1 - n);
* 生成出队后的新数组
*/
for (int j = n; j < peos.length - 1; j++) {
peos[j] = peos[j + 1];
}
peos = Arrays.copyOf(peos, peos.length - 1);
}
System.out.println(Arrays.toString(out));
}

  

/**
* 插入排序原理参照扑克牌,每一次取出一张牌,设为Ai ,插入到应该在的顺序里,并不需要新建一个新的数组。
* 从数组第二个元素开始,将Ai 与前面的元素(已经排序的i个元素)比较,
* 如果是升序,则应该找到Ai首次遇到大于自己的元素的位置,设为j,Ai排序本次循环后应该位于j处,
* 而从j到i-1的所有元素向后移动一位,填补原先Ai(i)的地方,Ai的值插入到移位后空出来的j(处)
* 这样实现了从i处抽取一个牌,插入到准确的位置。依次循环这个过程,循环到的每一个元素最后都会插入到它应该所处的位置上,从而实现了排序。
* [1, 2, 4, 5, 6, 7, 9, 3, 8]
* [1, 2, 3, 4, 5, 6, 7, 9, 8]
* @param array
* @param up
*/
public static void insertSort(int[] array ,boolean up){
for(int i=1;i<array.length;i++){
int current = array[i];
int from=0,to=i-1;
for(int j=from;j<=to;j++){
if(current <= array[j]){
for(int n=to;n>=j;n--){
array[n+1] = array[n];
}
array[j] = current;
break;
}
}
System.out.println(Arrays.toString(array));
}
}

  

/**
* 冒泡排序
* 选择第一个元素,依次与后面的元素比较,如果大于后面的元素就交换,一轮下来,保证最大的元素放在最后面。
* 循环这个过程
*/
public static void maoPaoSort(int[] array ,boolean up){
if(up){
for(int j = 0;j<array.length-1;j++){
int current = array[0];
for(int i=0;i< array.length-j-1;i++){
if(current> array[i+1]){
array[i]= array[i+1];
array[i+1]=current;
}else if(current< array[i+1]){
current = array[i+1];
}
}
}
}else{
for(int j = 0;j<array.length-1;j++){
int current = array[0];
for(int i=0;i< array.length-j-1;i++){
if(current < array[i+1]){
array[i]= array[i+1];
array[i+1]=current;
}else if(current > array[i+1]){
current = array[i+1];
}
}
}
}
System.out.println(Arrays.toString(array));
}

  

java 面试算法题的更多相关文章

  1. 分享13道上海尚学堂拿回来的Java面试真题,这些都是Java核心常见问题,想拿OFFER必看!

    上海尚学堂Java培训学员参加面试带回来的真题,分享出来与大家,希望大家能认真地看看做一遍.后面有详细题解答案,对照下,看看自己做得怎么样,把这些面试遇到的真题全部掌握,做好面试笔试前的准备. 一.1 ...

  2. Java面试题精选(三) JSP/Servlet Java面试逻辑题

    --   JSP/Servlet  Java面试逻辑题   --     很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...

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

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

  4. Java在算法题中的输入问题

    Java在算法题中的输入问题 在写算法题的时候,经常因为数据的输入问题而导致卡壳,其中最常见的就是数据输入无法结束. 1.给定范围,确定输入几个数据 直接使用普通的Scanner输入数据范围,然后使用 ...

  5. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附答案

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  6. java基础算法题

    为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想. [程序1] TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三 ...

  7. 合并K个有序数组(链表)【字节跳动面试算法题】

    本题是本人字节跳动一面考的算法题原题是有序数组,一时没想到怎么解决数组的问题,但是如果给的是有序链表数组,则可以用下面的方法解决 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创 ...

  8. python经典面试算法题1.4:如何对链表进行重新排序

    本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ...

  9. java经典算法题50道

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

随机推荐

  1. UVA11624_Fire!

    在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源.人不能通过有火的点.问一个人能够安全地走到目的地去?最短时间多少? ...

  2. Eclipse中设置作者、日期等的方式

    1.点击Windows->Preferences->Java->Code Style->Code Templates: 2.点击展开右侧的Comments选项卡,里面的选项对应 ...

  3. tomcat启动后过一会就自动关闭

    1.打开tomcat 下的log查看关键字眼 常见问题就是端口被占用,被idea 页面启动占用了

  4. MT【142】Bachet 问题,进位制

    问题: 满足下面两种限制条件下要想称出40以内的任何整数重量,最少要几个砝码: i)如果砝码只能在天平的某一边; ii)如果砝码可以放在天平的两边. 提示:对于 i)先证明如下事实: \[\textb ...

  5. CSU1911 Card Game 【FWT】

    题目链接 CSU1911 题解 FWT模板题 #include<algorithm> #include<iostream> #include<cstdlib> #i ...

  6. 20135239 益西拉姆 linux内核分析 可执行程序的装载

    益西拉姆 + 原创作品请勿转载 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” week 7 可 ...

  7. C函数调用机制及栈帧指针

    http://blog.csdn.net/jjiss318/article/details/7185802

  8. Webpack 学习笔记总结

    Webpack安装 Linux系统默认已经安装了node&npm,但版本比较低,而且没法升级,可以重新下载Node然后通过软链接替换系统自带的node和npm; ln -s /path_to/ ...

  9. (转)java getResourceAsStream的使用方法

    背景:对于java项目中配置文件加载时候的绝对路径和相对路径做一个清晰的认识! 1 分析路径 在Java项目中会经常用到getResourceAsStream这个函数获取一些配置文件,但是怎样正确使用 ...

  10. Jenkins(四)---Jenkins添加密钥对

    一.添加密钥 1.添加git用户和git密码对 ,用于git客户端从gitlab上拉取代码到本地 /** lihaibo 文章内容都是根据自己工作情况实践得出. *版权声明:本博客欢迎转发,但请保留原 ...