精华内容
下载资源
问答
  • 如何判断单链表有环及正确性证明

    万次阅读 2018-08-03 23:12:41
    双指针判断单链表是否有环的正确性证明 ​ 首先介绍一下这个问题。给你一个单链表,需要找到一个方法进行判断是否有环的存在。这篇文章主要证明一下,为什么存在环的情况下两个指针(slow和fast指针)就一定会相遇...

    双指针判断单链表是否有环的正确性证明

    ​问题:给你一个单链表,需要找到一个方法进行判断是否有环的存在。
    这篇文章主要证明一下,为什么存在环的情况下两个指针(slow和fast指针)就一定会相遇。

    双指针判断单链表是否有环

    ​使用两个slow, fast指针从头开始扫描链表。指针slow 每次走1步,指针fast每次走2步。如果存在环,则指针slow、fast会相遇;如果不存在环,指针fast遇到NULL退出。

    其实就是所谓的追及相遇问题:

    这里写图片描述

    证明存在环就会导致两个指针(slow和fast指针)一定相遇。

    现在,我把情况还原到完整的环中,看看具体发生的情况到底是什么?
    首先看下面的图,图中的单链表是有环的。
    在这里插入图片描述

    图1. 有环的单链表

    在这里插入图片描述

    图2. 步骤一

    在这里插入图片描述

    图3. 步骤二

    在这里插入图片描述

    图4. 步骤三

    从图4可以看出,经过两次移动,fast指针刚好进入环,指向node4节点,而slow指针才移动到node2节点。

    在这里插入图片描述

    图5. 步骤四

    在这里插入图片描述

    图6. 步骤五
    从图6可以看到,当slow指针移动到node4节点,即刚进入环时,fast指针已经移动到node8节点了。

    在这里插入图片描述

    图7. 步骤六

    从图7中看到,非常的巧,slow指针进入环后,向前移动了一次就和fast指针相遇了。

    将上述的过程一般化。
    首先可以肯定得是fast指针一定是先进入到环中的,随后slow指针才会进入到环中,可能slow进入环中时,fast指针已经在环里面循环很多圈了,这都没关系,我们只关注slow指针进入环时,fast指针与slow指针的相对位置。
    在这里插入图片描述

    图8. 泛化

    链表除头节点外,所有的节点都统一编号,进入环的节点是node k,图中只是标注了编号。整个环由k节点,k+1节点,…k+n节点构成,一共是(n+1)个节点。
    最开始的时候slow指针和fast指针都指向头节点,然后两个指针同时移动k次:
    (1) slow指针每次移动一个节点,到达k号节点,刚好是进入环的节点。
    (2) fast节点每次移动二个节点,通过2*k个节点,到达k+x号节点,处于环中。
    这个x可以计算出来,如下所示:

    x=2kk%n+1 x =(2*k -k)\%(n+1)

    下面进行验证一下。对于图6而言,k=4,n=4,所以x=4,所以当slow指向node4时,fast指针应该指向node(k+x)就是node8,可以看到图6已经验证了这个结论。

    下面计算一下slow指向k节点时,fast与slow地相对距离m。

    m=nx+1=n+1(2kk)%(n+1)=n+1k%(n+1) \begin{aligned} m=&n-x+1\\ =&n+1-(2*k -k)\%(n+1) \\ =&n+1 - k\%(n+1) \end{aligned}

    m满足:

    m<(n+1) m<(n+1)

    也就是说保持slow指针不动,fast指针再向前走m个节点就可以和slow指针相遇。
    由于slow指针向前移动一个节点,fast指针就会向前移动两个节点,所以同时再移动m次就可以相遇了。下面来给出证明。
    由上面的假设可知,当slow进入环时,即指向node k节点时,fast指针与slow指针的相对距离是m,也就是此时保持slow不动,fast再向前移动m个节点就可以和slow相遇。
    那么,现在slow和fast同时移动m次。slow节点会到达的节点为:
    k+m k+m
    fast节点会到达:

    k+(x+2m)%(n+1)=k+((2kk)%(n+1)+2m)%(n+1)=k+(k%(n+1)+2((n+1)k%(n+1)))%(n+1)=k+(k%(n+1)+2(n+1)2k%(n+1))%(n+1)=k+(2(n+1)k%(n+1))%(n+1)=k+(n+1k%(n+1))%(n+1)+(n+1)%(n+1)=k+(n+1k%(n+1))%(n+1) \begin{aligned} k+(x+2*m)\%(n+1)=&k+((2*k -k )\%(n+1) + 2*m)\%(n+1) \\ =&k+(k\%(n+1)+ 2*((n+1) - k\%(n+1)))\%(n+1) \\ =&k+(k\%(n+1) + 2*(n+1) - 2*k\%(n+1))\%(n+1) \\ =&k+(2*(n+1)-k\%(n+1))\%(n+1) \\ =&k+(n+1 - k\%(n+1))\%(n+1)+(n+1)\%(n+1) \\ =&k+(n+1 - k\%(n+1))\%(n+1) \end{aligned}
    下面进行化简与推导:
    m=n+1k%(n+1)k+(x+2m)%(n+1)=k+m%(n+1)m<(n+1)m%(n+1)=mk+(x+2m)%(n+1)=k+m \begin{aligned} \because \quad &m=n+1-k\%(n+1) \\ \therefore \quad &k+(x+2*m)\%(n+1)=k+m\%(n+1) \\ \because \quad &m<(n+1) \\ \therefore \quad &m\%(n+1)=m \\ \therefore \quad &k+(x+2*m)\%(n+1)=k+m \end{aligned}

    所以slow指针进入到环时,fast和slow指针共同再移动m次就可以在k+m节点相遇了。

    综上所述:

    slow指针进入环后,只要再走m步(fast落后slow指针的节点数)就一定会和fast指针相遇。slow指针进入环后,假设fast指针再往前走m个节点就会到达当前slow指针的位置,那么当slow指针和fast指针同时移动的时候,slow指针每向前移动一个节点,fast指针就会向前移动两个节点,fast与slow之间的距离就会缩短一个,所以当移动m步之后,fast指针就会和slow指针相遇。

    如果证明有误,欢迎留言指正~

    参考资料:检测单链表是否有环

    展开全文
  • 使用jQuery判断输入框对应值正确性

    千次阅读 2015-07-16 16:06:23
    使用jQuery判断输入框对应值,如果是数字,请将对话框边框颜色修改为绿色(标示正确),否则修改为红色(标示错误)

    使用jQuery判断输入框对应值,如果是数字,请将对话框边框颜色修改为绿色(标示正确),否则修改为红色(标示错误)


    HTML代码

    <input type="text" value="114"><br>
    <input type="text" value="110"><br>
    <input type="text" value="edf"><br>
    <input type="text" value="abc"><br>
    


    CSS代码

    input{
      margin: 5px;
      padding: 10px;
    }


    jQuery代码

    $('input').each(function(i,n){
    
      var isnum = n.value.match(/^\d+$/g);
      if(null != isnum){
        //是数字,边框变为绿色
        $(n).css('border','2px solid green');
      
      }else{
        $(n).css('border','2px solid red');
      }
     
    });

    最终效果


    展开全文
  • 用sscanf判断ip地址的正确性

    千次阅读 2009-07-11 12:52:00
    由于看到那个遍历字符串去逐个判断的代码就觉得不简洁,虽然c语言中没有脚本语言那么爽,但是好歹还有一个sscanf吧。所以写了个小函数 #include #include /*该函数能够验证合法的ip地址,ip地址中可以有前导0,也...

    由于看到那个遍历字符串去逐个判断的代码就觉得不简洁,虽然c语言中没有脚本语言那么爽,但是好歹还有一个sscanf吧。所以写了个小函数

     

     

    展开全文
  • 之前用LoadRunner调试返回结果检查时,遇到了一个有趣的问题,在此分享出来,以后用到的同学...2、 判断服务器返回的Content-Length值是否等于1840(正确情况下应该等于1840),如果等于,就输出成功,如果不等于,就

    之前用LoadRunner调试返回结果检查时,遇到了一个有趣的问题,在此分享出来,以后用到的同学参考下,少走几步弯路~

    脚本逻辑是这样的:

    1、 web_reg_save_param函数拿到服务器返回的请求中Content-Length的值。

    2、 判断服务器返回的Content-Length值是否等于1840(正确情况下应该等于1840),如果等于,就输出成功,如果不等于,就输出失败。


    问题来了:为什么index的值确实是1840,但是走到了else分支了呢?

    查了一下资料,发现LoadRunner用的是C语言编辑器,并不支持字符串等号比较。只能通过strcmp函数来比较,果断改了下脚本:


    还是返回错误看来还有别的问题,继续找~

    打印一下index的值,看下具体是什么东东。


    问题的原因貌似清晰了:web_reg_save_param函数返回的值不是字符串,也不是整型。

    查了下官方文档,原来web_reg_save_param函数返回的值是存放得到的动态内容的参数名称,所以并不能直接拿着用

    这样问题的解决方案就出来了:

    1、 将返回值转成string后再对比,可以正常做对比了。


    2、 将返回值转成int后再对比,也可以返回正常了。



    原文链接

    如需转载该篇文章,请注明来自“搜狗测试”


    展开全文
  • data = matrix(c(36,32,31,25,28,36,40,32,41,26,35,35,32,87,33,35),16,1) #16座楼盘均价 row_name = c("数据") Data = data.frame(data) attach(Data) mean(data) var(data) length(data) ...
  • //校验身份证号码正确性 function testId(id) { var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])...
  • 做正确正确的做事

    千次阅读 2018-05-10 20:22:39
    文章来源于知乎中的提问,进行整理后的结果,形成完整的正确做事思维: 这是管理学的命题,“做正确”是指首先决策正确,找对方向与目标,“正确的去做事”是指方法选择正确有效率。如何理解二者的关系是...
  • 如何验证自己代码的正确性?

    千次阅读 2019-01-05 21:24:22
    很多时候,我们写的代码虽然能够通过我们自己手动输入的样例,但是这段代码的正确性还是有待考究的。比如,当你在一些Online Judge的网站上敲题时,可能写的解决办法能够完美解决样例给出的输入,并给出正确输出,...
  • 输入某年某月某日,判断日期的正确合理以及输出该天是该年的第几天。运用if判断语句、while循环语句、算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、成员运算符、运算符优先级。。 #!/usr/bin/env ...
  • 判断用户名是否正确

    千次阅读 2017-03-15 10:46:25
    程序的开发过程中,经常需要判断用户输入的用户名是否正确,可以通过对比用户输入的用户名字符串是否与数据库中或者已经存在集合中的字符串相同,来决定用户输入的用户名是否正确。Java的基本数据类型可以使用“==”...
  • java判断身份证号是否正确

    千次阅读 2017-05-11 17:07:29
    需要判断身份证号是否正确的时候只需要这样调用 boolean t = CheckCard.checkIdcard(身份证号); true:正确 false:错误 public class CheckCard { public static boolean checkIdcard(String value) { int ...
  • 判断数独是否正确

    千次阅读 2016-06-04 17:31:55
    想必大家都玩过数独吧(我竟没玩过.....),在最近的周赛中我就遇到了一个关于数独的问题,给出数独让你判断是否正确,当时a了,可后来经过查询发现当时是由于数据不全面的原因才侥幸通过,下面我就纠正一下我的错误...
  • 程序验证(九):程序正确性规范

    万次阅读 2020-06-12 23:21:14
    程序验证(九):程序正确性规范 什么是程序的正确性?应当在指定的前提下,进行预定的行为,达到指定的结果。 部分正确性(Partial Correctness) 部分正确性指的是一个程序的停止行为 我们将部分正确性用霍尔三元组...
  • Android 判断IP地址及端口是否正确

    万次阅读 2021-03-17 18:18:53
    在进行网络编程时,端口或者IP的不正确会导致应用挂掉,通过以下方法可以对端口或者IP进行判断是否合法。 二、解决思路 1.端口判断 端口的有效范围在 0 ~ 65535之间,写一个判断方法即可。 2. IP判断 这儿的IP指IPv4...
  • 1.首先进行第一步判断传入的字符串是否符合HTTP路径的语法规则,即”HTTPS://” 或 “HTTP://” ,从封装的一个函数,传入即可判断- (NSURL *)smartURLForString:(NSString *)str { NSURL * result; NSString *
  • 正则表达式验证IP和端口格式的正确性

    万次阅读 热门讨论 2016-11-03 10:03:22
    在网页开发中可能会遇到需要对在页面输入的ip和端口进行正确性验证,那么正则表达式就是最有力的工具: 1:ip的正则表达式: 格式是由“.”分割的四部分,每部分的范围是0-255; 每段的正则可以分几部分来写:200...
  • PHP判断手机号码是否正确

    万次阅读 2019-04-15 15:38:40
    我们将用正则表达式来匹配手机号码,我们先分析一下手机号码的编码规则: ...php用正则表达式判断手机号码的写法: $g = "/^1[34578]\d{9}$/"; // "^"符号表示必须是1开头; "[ ]"的意思是第二个数字必须是中括...
  • android 判断身份证号是否正确

    千次阅读 2016-08-12 16:58:36
    下面是判断身份证是否正确的一个demo 可以直接通过Java 运行 ,也可以改成工具类 public class IDCard { /*********************************** 身份证验证开始 ****************************************/ /*...
  • js判断身份证号码是否正确

    千次阅读 2019-04-29 16:09:34
    //身份证号合法验证 //支持15位和18位身份证号 //支持地址编码、出生日期、校验位验证 var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:...
  • 高德地图判断地址输入是否正确

    千次阅读 2016-06-13 16:28:31
    开发中经常会遇到判断地址输入是否正确,如果项目中集成了高德地图的SDK,那么为什么不用ta? 1、声明控件: // 地理编码 private static GeocodeSearch geocoderSearch; 2、在onCreate中创建实例:  ...
  • 如何判断C语言输入类型正确与否

    千次阅读 2017-12-04 19:35:36
    如果输入一个整形数据,符合该数据类型的要求,则返回值x=1(正确读取的数据数量为1) 当你键入一个字符,如*,c…… 不符合该输入数据类型的要求,于是返回值x = 0(判断为假) ————————————————...
  • js 验证 json 格式正确性

    千次阅读 2017-12-27 09:24:31
    if(jsonContent.indexOf('{')>-1){ return { "msg":0, "error_code":"JSON格式正确" }; }else{ return { "msg":1, "error_code":"JSON格式错误" }; } } catch(e) { console.log(e); return { "msg":1...
  • 验证正确性的方法

    千次阅读 2006-09-30 10:11:00
    验证正确性的方法1、 bug和调试bug的来源吗?调试,就是找出程序中的错误并改正算法错误:是指一个算法中引起该算法不能实现其预定目标的热病和错误。主要包括四种基本类型:二义性,语法错误,语义错误,逻辑错误...
  • 界面验证码功能的实现,以及对用户输入验证码正确性判断
  • 判断IPV4格式是否正确
  • Js检测判断URL输入是否正确

    千次阅读 2012-11-22 13:10:01
    JavaScript检测判断用户输入的URL是否正确,简单的正则规则,很准确的判断URL的合法,值得借鉴!   检查是否为URL  function check(){  str = form1.txt.value;  str = str.match(/http:\/\/.+/);...
  • 哈夫曼编码正确性之屌丝证明法

    千次阅读 2013-10-21 19:05:00
    哈夫曼编码是数据结构中比较基础的东西。...对比两个问题后,开始思考哈夫曼编码的正确性问题。 对比两个问题后,开始思考哈夫曼编码的正确性问题。   回顾一下哈夫曼编码: 哈夫曼编码的构造代价为 Cost=所有叶
  • javascript前端XML格式正确性验证方法

    千次阅读 2012-03-19 15:59:09
    鉴于最近要做一个前端xml的数据验证,查找了一些资料,并且自我了一些总结,写了一个简单的xml字符串验证函数,其实现的过程主要是通过用xml解析器去解析xml字符串,如果解析错误,会报出相应的解析错误,使用该...
  • 如何判断出栈顺序是否正确

    千次阅读 2016-08-23 14:48:25
    一.若初始数列为123456789(升),则在出栈结果中,任选一个位置i,该位置右边所有小于位置i元素的,必须是降序排列。... 可快速判断出,9后面的元素1234并没有降序排列,故不合法! 二.同理可知,若初始
  • 如何进行shell脚本正确性测试

    万次阅读 2012-09-15 20:56:22
    ------------------------------------------------------------------------...在实际工作中,需要对shell脚本进行正确性测试。 如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 591,438
精华内容 236,575
关键字:

如何判断要做的事的正确性