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. 以rem为单位,数值较小,border-radius:50%部分浏览器渲染不圆方法

    元素使用rem做单位且较小时,对于border-radius:50%在部分浏览器不圆解决方法: 1.将原来宽高扩大至两倍(.1rem --> .2rem),再使用transform:scale( ...

  2. 手动验证 TLS 证书

    证书结构 我们现在使用的 TLS 证书的标准是 X.509,版本号为 V3.版本号可从证书的 Version 字段看到. 根据 RFC 3280 定义的证书结构,证书由三个部分组成: 证书主体(TBS ...

  3. 服务器上详细前后端分离项目搭建(springboot+vue)

    介绍:本文用的经典的前后端分离开源项目ruoyi Gitee链接地址:https://gitee.com/y_project/RuoYi 一.拉取项目: 利用Git把项目拉取到本地,也可以直接利用id ...

  4. MPLS L3 跨域 optionB 配置

    mpls跨域optionB optionB的核心思想是私网路由传递过程是 PE-ASBR1-ASBR2-PE2 在传递过程中私网标签发生了变化(由ASBR重新分配了私网标签),而在数据平面(不考虑PH ...

  5. Linux下将一个文件压缩分包成多个小文件

    压缩分包 将文件test分包压缩成10M 的文件: tar czf - test | split -b 10m - test.tar.gz 解压 将第一步分拆的多个包解压: cat test.tar. ...

  6. sublime速查手册

    零.sublime的优势 容易上手 支持多点编辑 包管理:Package Control 速度快 深度可订制,配置文件放github上 sublime-config 快速文件切换 cmd + p 输入 ...

  7. 每天一个 HTTP 状态码 202

    202 Accepted 202 Accepted 表示服务器已经接受了这个请求,但是还不确定这个请求是否能够成功地被处理完.该请求最终可能会或可能不会被执行,并且在处理发生时可能会被拒绝,这是不确定 ...

  8. C++primer第一章

    第一章 : 开始 1.1 编写一个简单的C++程序 要点:每个函数有且只能拥有一个main函数,且main的默认返回是一个int类型. 函数定义:返回类型,函数名,形参列表,函数体 1.1.1编译 运 ...

  9. Redis概述及基本数据结构

    SQL vs NoSQL 结构化 SQL 是结构化的,一旦定义了表结构,以后在维护数据的时候必须严格遵守定义的结构. NoSQL 是非结构化的,常见的形式有 Redis 的 Key-Value 存储形 ...

  10. java和.net 双语言开发框架,开源的PaaS平台

    当下,我国国内的PaaS平台正在蓬勃发展,各式各样的PaaS平台层出不穷,但万变不离其宗,一个优秀的PaaS平台总有自己独树一帜或与众不同的地方.那么,首先我们要了解下什么是PaaS平台?PaaS是( ...