1.循环数组一般不推荐通过建立相同的数组不断叠加来实现,虽然理论上是可行的,但是会浪费极大的空间,特别是对于大数据的情况下,程序一般会马上挂掉

2.循环数组的结构表示中的一种常用形式就是通过取余操作来实现这种伪循环

3.取余操作对负数取余其结果仍然是负数,对正数取余其结果是正数,对0取余其结果仍然是0

4.对于作者的p = (p + d + n - 1) % n + 1;的代码的解释

首先我们要明白这边作者为了解决取余操作中永远不可能出现的n,其是通过改变计算方法来实现,当然我们也可以通过改变数组的对应关系来实现,例如原先的对应关系是i = i,我们可以调整为i = i+1,这样虽然符合了取余的范围,但是对于数据的模拟情况显然不是非常好的,因此接下来将会介绍作者的做法

首先要让10 % 10 == 10,那么就需要以下的操作,(10 - 1)% 10 + 1;

也就是让所有的数字往后退一位,注意这时候这些数字仍然是在取余的范围内的,即例如n % m 其计算的范围是0到m-1,而这时候n的取值范围是1到m,那么我们就先把n的范围调整到m的范围就可以了,注意这边的n可以取任意值,只不过去除其中一段比较特殊的来方便说明,拓展如果n的范围是k,k+m-1那么要实现上述所说的m % m == m;只需要下面的操作(m - k)% m + k(n == m)

也就是说上述的操作实现了将原本取余后会等于0的m转变为仍为m,而并不会改变其他数的取余结果

因此(p - 1)% n + 1是一个整体

而+d作者自己本身已经给出就是步长参数来控制是顺时针还是逆时针,那么最后为什么还要+n呢,注意前面所说的负数取余仍然是负数,因此我们必须要保证(p + d + n - 1)的结果是正数,否则就会使得结果出现错误,可以凭借自己本身的感受知道,p最小为1,而上述的式子最小也就是-1,加上n是足够的了

同时也就是说 如果 n % m = k;那么(n + m)% m = k;

这边给出笔者自己的另一些小技巧,取余后是负数如何调整可以这样

假设 n % m = k;k不是正数,如何调整呢

(k + m) % m(这边之所以还需要对m取余是因为如果k=0的话加上m会超过m的取余范围的)

循环数组%操作下的一些解释(对于4.4UVA133的一些解释)的更多相关文章

  1. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  2. Javascript入门(五)数组操作、循环语句

    一.数组与数组操作 <script type="text/javascript"> //数组定义方式 var list1 = new Array(1,2,3); var ...

  3. PHP内核探索之变量(4)- 数组操作

    上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用的函数系列-数组操作的相关函数做进一步的跟踪. ...

  4. PHP数组操作大全

    <?php /** * File: phpstudy : array_test.php * Created by PhpStorm. * User: IhMfLy Pheonix@jtv-070 ...

  5. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  6. 前端开发:setTimeout与setInterval 定时器与异步循环数组

    前端开发:setTimeout与setInterval 定时器与异步循环数组 前言: 开通博客园三个月以来,随笔记录了工作中遇到的大大小小的难题,也看过无数篇令人启发的文章,我觉得这样的环境是极好的, ...

  7. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  8. JavaScript中数组操作常用方法

    JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...

  9. 深入理解循环队列----循环数组实现ArrayDeque

    我们知道队列这种数据结构的物理实现方式主要还是两种,一种是链队列(自定义节点类),另一种则是使用数组实现,两者各有优势.此处我们将要介绍的循环队列其实是队列的一种具体实现,由于一般的数组实现的队列结构 ...

随机推荐

  1. 这 BUG,绝了

    上周只上了三天班,但我也丝毫不敢懈怠,BUG 更是一个也没少写. 看着满屏幕的 ERROR,我陷入沉思.为什么我写的代如此烂,无法像大牛们写的那般优雅? 越想越自卑,越想越抑郁.我觉得这样不行,一定得 ...

  2. os、json、sys、subprocess模块

    os模块 import os 1.创建目录(文件夹) os.mkdir(r'a') # 相对路径 只能创建单级目录 os.makedirs(r'a\b') # 可以创建单级和多及目录 2.删除目录 o ...

  3. HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM

    HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...

  4. Git 后续——分支与协作

    Git 后续--分支与协作 本文写于 2020 年 9 月 1 日 之前一篇文章写了 Git 的基础用法,但那其实只是「单机模式」,Git 之所以在今天被如此广泛的运用,是脱不开分支系统这一概念的. ...

  5. 揭秘华为云GaussDB(for Influx):数据直方图

    摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...

  6. CentOS下安装与配置Maven

    安装Maven 当前系统 [root@141 ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 下载 http://ma ...

  7. k8s docker 中部署think php 并搭建php websocket

    不得不说php 对云原生有点不够友好,之前用java .net打包docker镜像 一下就ok了,php倒腾了好久才算部署成功. 场景:使用阿里云ack(k8s) 部署采用thinkPHP框架的php ...

  8. 学习Java的第十六天——随机数

    学习内容:随机数 1.GetEvenNum()方法 实例代码: package 数字处理类; public class MathRondom {public static int GetEvenNum ...

  9. 【单片机】CH32V103串口IDLE空闲中断

    CH32V103c8t6 在寻找解决接收完数据后,怎么即时判断数据已经完成了接收.发现串口有一个IDLE空闲中断.如下图描述: 意思是在串口接收完一帧数据 会产生一个中断,此时程序可判断为数据已接收完 ...

  10. springcloud-- Alibaba-nacos--支持的几种服务消费方式

    通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...