牛客网洗牌连接

文章目录

  • 1.题目概述
  • 2.题目分析
  • 3.解决思路
    • 3.1 暴力法解决
    • 3.2 非暴力法解决
  • 4. 具体代码

1.题目概述

洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右手拿着4,5,6。在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后,我们按照从上往下的顺序看这组牌,就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。

输入描述:

第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,…,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。

输出描述:

对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。

示例:

输入:3 3 1 1 2 3 4 5 6 3 2 1 2 3 4 5 6 2 2 1 1 1 1
输出:1 4 2 5 3 6 1 5 4 3 2 6 1 1 1 1

2.题目分析

输入:
用白话来说,第一个数T就是我们要洗几副牌
第二个数为n 也就是每副牌个数的1/2
第三个数为k 即就是我们需要洗牌几次
之后的2*n个数为我们需要洗的牌
循环输入T对 n k以及牌的顺序
输出:
输出就是将我们刚才洗的T副牌顺序输出,牌与牌之间隔一个空格,末尾换行

3.解决思路

3.1 暴力法解决

对于此类问题,我们首先考虑暴力法解决问题,就是一次又一次的洗牌,牌用数组n表示,但是有一个问题就是当K和n非常大的时候,即像题目中描述的k=100时,假设n = 10000,我们需要洗牌100次,每次洗牌都意味着要遍历一遍数组,但每次移动数组元素时不能覆盖其原有的元素,所以需要开一个相同大小的数组保存原有的数值。一次洗牌后又要对数组进行逆序,进行之后的洗牌。时间、空间耗费都比较大,那么有什么简便的方法呢?

3.2 非暴力法解决

我们首先根据样例和题意分析洗牌前和洗牌后有什么不同:

但是这仅仅是一次排序并不能说明我们推出的公式就是对的,假设我们需要两个洗牌:

可见我们的推测有一定的正确性

4. 具体代码

import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){int m = scanner.nextInt();while(m!=0){int n = scanner.nextInt();int k = scanner.nextInt();int [] arr = new int[2*n];//计算下标for(int i = 0; i < 2*n;i++){int temp = i;for(int j = 0; j < k ;j++){if(temp < n){temp = 2*temp;}else{temp = 2*(temp-n) + 1;}}//temp为元素经历k次之后的下标arr[temp] = scanner.nextInt();}//输出for(int i = 0;i < 2*n;i++){if(i == 2*n-1){System.out.print(arr[i]);}else {System.out.print(arr[i]+" ");}}System.out.println();m--;}}}
}

牛客网算法之洗牌详解相关推荐

  1. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--01~20 目录 剑指offer--66道在线编程--01~20 1.二维数组中的查找某个targe ...

  2. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--41~66 目录 剑指offer之66道在线编程--41~66 42.和为s的两个数字 43.左旋转 ...

  3. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--21~41 目录 剑指offer之66道在线编程--21~41 21.栈的压入.弹出序列 22.从上 ...

  4. 牛客网算法工程师能力评估

    牛客网算法工程师能力评估 题目来源:https://www.nowcoder.com/test/200/summary 1.递归算法x(x(8))需要调用几次函数x(int n)? class pro ...

  5. 牛客网算法题 (一) 办公室路径条数解法 Shopee的办公室(二)

    办公室路径走法 题目描述 shopee的办公室非常大,小虾同学的位置坐落在右上角,而大门却在左下角,可以把所有位置抽象为一个网格(门口的坐标为0,0),小虾同学很聪明,每次只向上,或者向右走,因为这样 ...

  6. 牛客网算法教程-中级篇-第一章

    文章目录 学习目标: 学习内容: 学习时间: 学习产出: 1.旋转词-模拟 2.旋转矩阵-模拟 3.数轴覆盖-贪心 4.1 完整字符串1(括号字符串的有效性)-栈 4.2 完整字符串2(缺失的括号)- ...

  7. 牛客网算法错题笔记总结

    最近在做一些牛客网的编程题和算法题:把一些比较生疏的知识点记下来,自己复习,也供大家参考: 1.给定节点数n后,求二叉树最多的结构 结构数量num = C(2n,n)/n+1;其中n是给定的节点数,比 ...

  8. 牛客网算法——名企面试的笔试(6)

    NC155牛牛的递增数列 package 牛客网名企面试笔试问题2021;import org.junit.Test;/*** @Classname NC155牛牛的数列* @Description ...

  9. 牛客寒假算法基础集训营3-题解

    A.处女座与线性代数 链接:https://ac.nowcoder.com/acm/contest/329/A 来源:牛客网 题目描述 众所周知,处女座是数学大师.他定义了k维空间里的处女座点. 对于 ...

  10. 牛客网算法课程优惠码

    报名牛客精品面试算法课,原价99元,专属优惠立减10元,一本书的价钱就能终身反复学习全网最超值的干货课程,包括十二章必备算法知识点及面试常考题,每课均有配套练习.听了之后感觉很不错,有需要的大家可以点 ...

最新文章

  1. 使用PHP读取和创建txt,doc,xls,pdf类型文件
  2. abap BDC 使用方法
  3. JAVA输出x和y和z_JAVA实例:输入三个整数x,y,z,请把这三个数由小到大输出-吾爱编程网...
  4. java中日期计算时间差,java中依据,两个日期,计算时间差
  5. 事物 php,什么是php事务
  6. Java基础篇2——运算符
  7. 《深入浅出DPDK》读书笔记(一):基础部分知识点
  8. [Vue warn]: Cannot find element: #main
  9. 【气动学】基于matlab内弹道【含Matlab源码 057期】
  10. share 接口的使用
  11. MangoDB的下载和安装
  12. 不同浏览器的url长度限制
  13. php底部漂浮广告位代码,网站顶部底部(上下)悬浮(漂浮)广告位代码
  14. qq互联android sdk,QQ互联API列表 - YangJunwei
  15. linpack测试软件,【分享】linpack ——intel的pc算力测试软件
  16. 《系统之美》— 忒修斯悖论
  17. 哈尔滨红继红小学计算机名师,【喜报】哈尔滨市20名教师喜获特级教师荣誉称号丨有没有你(认识)的老师...
  18. The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on .
  19. 单词1(-cess -ceed -cede -gress -gred -grad)=to go、go
  20. idea启动过多导致C盘空间不足

热门文章

  1. 批处理创建桌面快捷方式
  2. 点云最小二乘法拟合空间直线
  3. 完全理解android事件分发机制
  4. MAVEN打包时没有将src/main/cache文件夹打到到WAR包中
  5. 【excel】插入其他文件做工作表
  6. python爬虫抖音视频代码_python爬虫 抖音短视频解析下载
  7. C++:空间坐标映射到球面坐标/全景图
  8. Source Insight4.0的在整个工程中查找内容
  9. Word 2016 撰写论文(6): 取消/撤销 自动编号
  10. salt 安装kubernetes集群3节点