/**
* 设有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. Xpack集成LDAP

    支持两种配置方式: The ldap realm supports two modes of operation, a user search mode and a mode with specifi ...

  2. java多线程 -- Condition 控制线程通信

    Api文档如此定义: Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对 ...

  3. Android Studio添加文件注释头模板?

    Self Settings: as中class文件头注释: File -> Settings -> Editor -> File and Code Templates -> 右 ...

  4. SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 E. 疯狂计数

    1.改高精度 :float/double的精度为x位,小数部分最多x+x位(乘法和加法),整数部分<1000000*1000000/2=5 * 10^11 2.分成整数部分和小数部分分别存储,貌 ...

  5. C#线程篇---Windows调度线程准则(3)

    Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...

  6. Python【zip-map-filter】三个内置函数

    print("============内置函数:zip===========")l2 = ['a','b','c','e','f','g']l3 = [1,2,3]L4=['A', ...

  7. P4310 绝世好题

    P4310 绝世好题 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 说明 对于100%的数据,1<=n ...

  8. python内置数据结构方法的时间复杂度

    转载自:http://www.orangecube.net/python-time-complexity 本文翻译自Python Wiki 本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了P ...

  9. linux网卡的开启

    一:文件配置网卡在开机时,自动启用 首先我们使用 ip addr查看IP信息 [root@redhat2 network-scripts]# ip addr : lo: <LOOPBACK,UP ...

  10. 2017 清北济南考前刷题Day 2 afternoon

    期望得分:100+60+70=230 实际得分:0+60+0=60 T1 可以证明如果一对括号原本就匹配,那么这对括号在最优解中一定不会被分开 所以用栈记录下没有匹配的括号 最后栈中一定是 一堆右括号 ...