/**
* 设有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. linq 左连接实现两个集合的合并

    //第一个集合为所有的数据 var specilist = new List<Me.SpecificationsInfo>(); var resultall = (from a in db ...

  2. [AT697]フィボナッチ

    题目大意:给你$n,k(n\leqslant10^9,k\leqslant10^3)$,求$f_n$.$f$数组满足$f_1=f_2=\cdots=f_k=1$,$f_n=\sum\limits_{i ...

  3. 【Cf #502 F】The Neutral Zone

    本题把$log$化简之后求得就是每个质数$f$前的系数,求系数并不难,难点在于求出所有的质数. 由于空间限制相当苛刻,$3e8$的$bitset$的内存超限,我们考虑所有的除了$2$和$3$以外的质数 ...

  4. BZOJ2217 [Poi2011]Lollipop 【贪心】

    题目链接 BZOJ2217 题解 如果只判定存不存在方案的话,我倒是想到可以将\(2\)拆成两个\(1\),其中一个不能作为区间开头,线段树优化计算补集方案数 但是一看这道题要输出方案啊,,, 怎么办 ...

  5. pandas读csv、数据处理

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  6. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  7. day19 IO编程

    文件:文件是数据源(保存数据的地方)的一种. 文件在程序中是以流的形式来操作的 内存(程序)到文件是输出流,文件到内存(程序)是输入流. 字节流:可用于读写的二进制文件及任何类型文件. 字符流:可以用 ...

  8. vuejs实现数据驱动视图原理

    什么是数据驱动 数据驱动是vuejs最大的特点.在vuejs中,所谓的数据驱动就是当数据发生变化的时候,用户界面发生相应的变化,开发者不需要手动的去修改dom. 比如说我们点击一个button,需要元 ...

  9. Tomcat——Tomcat使用详解

    Tomcat简介 官网:http://tomcat.apache.org/ Tomcat GitHub 地址:https://github.com/apache/tomcat Tomcat是Apach ...

  10. 在 iPad 上试验从用算法生成法线贴图-到法线映射光照效果

    在 iPad 上试验从用算法生成法线贴图-到法线映射光照效果 目录 概述 一般来说, 法线贴图是用高模的法线图, 低模的纹理图, 来生成较好的渲染效果. 而法线图通常是通过图像处理软件来生成的, 这里 ...