/**
* 设有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. BZOJ3156 防御准备(动态规划+斜率优化)

    设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min ...

  2. JVM中各种变量保存位置

    Java中变量分为静态变量,实例变量,临时变量.那么各种变量具体保存在JVM中的何处呢? 1 静态变量:位于方法区. 2 实例变量:作为对象的一部分,保存在堆中. 3 临时变量:保存于栈中,栈随线程的 ...

  3. CF960G Bandit Blues 【第一类斯特林数 + 分治NTT】

    题目链接 CF960G 题解 同FJOI2016只不过数据范围变大了 考虑如何预处理第一类斯特林数 性质 \[x^{\overline{n}} = \sum\limits_{i = 0}^{n}\be ...

  4. 【bzoj1187】 HNOI2007—神奇游乐园

    http://www.lydsy.com/JudgeOnline/problem.php?id=1187 (题目链接) 题意 一个$n*m$的矩阵,其中每一个位置有一个权值,求一条回路使得经过的位置的 ...

  5. 使用cmstp绕过应用程序白名单

    默认情况下,AppLocker允许在文件夹中执行二进制文件,这是可以绕过它的主要原因.已经发现,这样的二进制文件可以很容易地用于绕过AppLocker和UAC.与Microsoft相关的二进制文件之一 ...

  6. 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!(dij+bitset)

    从S出发跑dij,从T出发跑dij,顺便最短路计数. 令$F(x)$为$S$到$T$最短路经过$x$的方案数,显然这个是可以用$S$到$x$的方案数乘$T$到$x$的方案数来得到. 然后第一个条件就变 ...

  7. 【agc003D】Anticube

    Portal --> agc003D Description 给你\(n\)个数,要从里面选出最多的数满足这些选出来的数中任意两个数的乘积都不是立方数 Solution (为什么感觉最近这种解法 ...

  8. spring-session使用配置(分布式共享session配置)

    1. 添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId ...

  9. 非极大值抑制Non-Maximum Suppression(NMS)

    非极大值抑制(Non-Maximum Suppression,NMS)   概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局 ...

  10. 野指针(Wild pointer)和悬垂指针(dangling pointer)

    详细参考如下: Dangling pointer(悬垂指针.迷途指针)和 Wild pointer(野指针) 迷途指针经常出现在混杂使用malloc() 和 free() 库调用: 当指针指向的内存释 ...