首页 > 其他分享 >2023.4.12学习随笔:学贪心学到数组循环

2023.4.12学习随笔:学贪心学到数组循环

时间:2023-04-12 19:23:39浏览次数:50  
标签:10 12 temp max num 2023.4 贪心 循环 255

代码随想录 (programmercarl.com)在做这个题时候发现数组循环%没看懂,就开始琢磨这一点,查了很多资料都没有讲,可能是这个知识比较基础(嘿嘿我基础太差了)慢慢来吧~

 

编程的时候,很多时候都会要求一个数在某一个范围内进行反复循环,0~100循环,0~5循环等等。一般的方法是使用if语句,当判断达到最大值的时候回到开始处。实际上使用这种方法也是可以的,但是如果有更简单更高效的方法你是否还会使用if语句呢。

先说说使用 & 的方法吧。比如说我想让一个数在0~7内循环,该如何做呢?temp = (temp++)&0x07,如此就简单的实现了0~7循环。因为要实现0~7的循环,其实只要提取一个变量递增的低三位即可。不管这个变量如何变化,它的低三位始终都是在0~7循环变化的。同理,它也可以实现0~15、0~31变化。但是这个方法有局限,它只能按照连续bit位的最大值进行循环。

现在再说 %,这个就厉害了,它不存在这个限制。可以在0~任意数循环。比如0~5循环,只要temp = (temp++)%6(注意是6而不是5),那么temp就会在0~5之间循环了(这是我在看循环队列的时候看到的方法,当时很是震惊,关于循环队列更多的东西将在循环队列中讲解)。

很神奇吧,更神奇的是使用方法它还可以计算两个变量之间的距离(因为距离时没有负数的,这里我称之为距离可能不是很好理解,慢慢来)我们知道不管是8bit数据,16bit、32bit、64bit,它始终有一个位数的限制,如何在有限的位数里面获得两个数据之间准确距离信息呢。以8bit为例,最大数为255,第一次读取为0x4,第二次读取是0x9,那么从0x04变化到0x09,变化了几次(递增数为1)? 9 – 4 = 5,如果变化后的数小于255当然好办,但是超过了255,又从0开始递增呢?这个时候又该如何。比如说一开始读取的是251,之后再读一次,变成了1,怎么算,251-1=250?肯定不对,1-250=-250,更不是?那到底变化了几次?252、253、254、255、0、1,这里可以看出是6,但是该怎么计算,又是否有一个公式可以在不改变原来数据变化的情况下将超过限制和没超过限制这两种情况的计算包含呢。有的。就是length = (num2 – num1 + max)%max。关于这个公式更详细内容请看循环队列小节。

确实,使用%可以在任意数之间循环,但是她也有限制,就是目前来看只能实现递增1的情况,我想递减呢?就是说我想从9减为0,然后从9开始继续,又该如何。我的一个项目就需要这样的变化,怎么办,如果用if确实能够解决问题,但是直觉告诉我,肯定有简单方法实现,所以我就上网搜,但是可能我搜索的方法不对,始终没有搜到,所以我暂时搁置了。直到一天夜里,回想递增循环的情况,慢慢的思考其中的本质,再结合距离计算的公式,突然明悟了。就是num--; num = (num+max)%max;这样两条语句去实现。比如9~0,就是num--; num = (num+10)%10;

那么怎么理解呢,按理说0再自减就是0xff,即255,再加10就是265,265%10 =5,怎么就变成了9呢?这和存储有关。255从有符号的角度来看,就是-1,-1+10等于9,9%10=9,没错,就是如此。但是我的变量声明不是有符号的,而是无符号的,怎么也没有出问题呢?这是因为溢出了,因为265在8bit情况下溢出就变成了9,所以计算也不会出现问题。所以这些计算机基础方面的东西一定要理解透彻清晰,才能更好的驾驭一门语言,你也会发现其中的东西真的很神奇。

 

标签:10,12,temp,max,num,2023.4,贪心,循环,255
From: https://www.cnblogs.com/LianIsFlying/p/17310926.html

相关文章

  • 繁星队4.12团队项目计划会议
    下午两点召开了本团队项目计划会议,由队长进行了智能建立解析系统的页面,基本功能和数据库的展示,讨论了完整系统的功能,确定了团队计划backlog,制定了任务索引卡,进行了工作认领和时间估计。会议视频:https://www.bilibili.com/video/BV1oj411c7L4/?buvid=XUED062ED9D795F27DFBBCF5DA70......
  • x210-2023-04-12
    1、编译提示警告说36行的|附近有问题,按提示应该系统怕表达式优先级有问题提示要加括号,但是|左右的表达式都已经有括号括起了,也就是()|(),于是只能将整个表达式都括起来试试,也就是(()|()),再次编译警告依旧存在,于是只能靠猜测和尝试了,比较大嫌疑的就是位操作里的0xff<<8缺少括号,而且刚好在......
  • 英语每日(4.12)
    commissondiscriminationarchitectchancellorpromptdiscardtuitionverbalsubscribeprescribeascribereluctantsolecomplycoordinateaccommodateobligecommoditygarmentconstarinconvictthesisunchartedcharteressenceanti......
  • 2023年4月12日周三
    计划形势与政策提交准备任务书,前期报告,中期报告,ppt执行09点12分  开始15点44分  答辩完了,真操蛋。记录已解决想法问题可以在邀请和邀请链接那里加一个字段,使其只在项目创建者时可用或显示。。我想简单了,人家实现的更牛逼,直接没有成员管理这个页面,也没有邀请链接......
  • 230412 关于阅读的材料选择与阅读方法
    你最近在总结你的学习系统的时候,遇到了一个问题.就是Morty建议,通过阅读,尤其是广泛的阅读提升英语的理解力.关于如何通过阅读提升理解力,你在2月的时候,应该有过思考.主要的参考资料就是230211中,如何通过阅读提升英语.粟之的建议是通过精读,去弄懂文章的中心意思.但是,你......
  • 漏洞-Oracle MYSQL Server 安全漏洞(CVE-2022-1292)
    https://blog.csdn.net/weixin_45839894/article/details/126158078openssl:relocationerror:openssl:symbolEVP_mdc2versionOPENSSinedinfilelibcrypto.so.1.1withlinktimereference建议先删掉/usr/bin/openssl......
  • 每日总结-23.4.12
    <%@pageimport="zhengcechaxun.Pd_zhengce"%><%@pageimport="zhengcechaxun.Thesql"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>&......
  • 2023.4.12——软件工程站立会议
    团队照片:站立会议内容:昨天做了什么?完成了团队第一阶段会议;今天要做什么?准备开始写具体代码实现;遇到什么问题?团队会议纪实和博客整理;......
  • 火山引擎数智平台协助洞察美图类 APP 新增长 付费用户转化超过 124%
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群美图类APP的下一个增长点在哪里?目前,国内市场上的美图类APP大多都遵循着基础功能免费使用、个性化热门功能收费使用的原则。即用户可以在APP内选择基础的免费修图功能,比如「瘦脸瘦身」、......
  • UVa 11129 An antiarithmetic permutation (构造题&想法题&分治)
    11129-AnantiarithmeticpermutationTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=2070Apermutationof n+1 isabijectivefunctionoftheinitial n+1......