![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编码技巧
华天下之大软
兴趣爱好:咖啡、桌球、健身、户外、骑行、黄宗泽
展开
-
数学归纳法——编码的依据
数学归纳法:(用于证明断言对所有自然数成立)1、 证明对于N=1成立2、 证明N>1时:如果对于N-1成立,那么对于N成立(关键的一步) 如,求证:1+2+3+…+n = n(n+1)/2 int sum(int){1、1=1*2/2 if(n...原创 2018-06-25 17:51:17 · 482 阅读 · 0 评论 -
中序遍历下一个结点
思路:给出N,有三条路可以走,L,R,P 向L走:不会向L走(中序遍历先左子树再根然后到右子树,既然都到根N了,就不会返回到左子树L) 如果N的R!=null:返回右子树的第一个结点如果N的R==null, 且N是P的左子树:返回P 否则,且N不是P的左子树:一直往父亲结点走,直到是某个结点左子树 代码示例: package co...原创 2018-06-28 14:08:34 · 266 阅读 · 0 评论 -
【已修复】这是测试博客是否无法正常使用(2018-06-26 16:42:44起无法正常显示)
package com.sise.recursion;public class Node { private final int value;//用户定义之后就不能修改 private Node next; public Node(int value){ this.value=value; this.next=null;//这样建立出来的结点都是单点Node } ...原创 2018-06-27 19:01:13 · 168 阅读 · 1 评论 -
树的遍历_构造后序
通过前序遍历和后序遍历来构造出后序遍历/树思路:由前序遍历可以看出树根是A,对应中序遍历,可以看出左子树有4个元素为DBGE,再把这四个元素对应到前序遍历中可以得知B是左子树的树跟……左子树前序:BDEG左子树中序:DBGE由此可见,规模不断缩小,可用递归推出这棵树。 代码示例: package com.sise.recursion;/* * 遍历 */public class TreeT...原创 2018-06-27 17:28:13 · 121 阅读 · 0 评论 -
前、中、后序遍历二叉树
二叉树的遍历:前序遍历,中序遍历,后序遍历,层次遍历 如何进行前序遍历:1、 先遍历树根2、 然后前序遍历左子树3、 再前序遍历右子树 如何进行中序遍历:1、 先中序遍历左子树2、 然后遍历树根3、 再中序遍历右子树 如何进行后序遍历:1、 先后序遍历左子树2、 然后后序遍历右子树3、 再遍历树根前序:ABDEGCF中序:DBGEACF后序:DGEBFCA 代码示例: packa...原创 2018-06-27 16:02:20 · 192 阅读 · 0 评论 -
浅谈数据结构
数据结构(IT汪要点的技能):数组:开劈连续空间,通过下标可以快速随机访问数组中的元素,但是在插入和删除操作时耗时间 链表:访问链表元素耗时间,但是通过指针在插入或删除时元素时非常方便 队列,栈:不支持随机访问,只有push()和pop()两种操作 树:二叉树,搜索树,堆/优先队列 关于栈,队列,优先队列的区别:比如,同时执行Push(1); push(3);push(2);pop();pop()...原创 2018-06-27 15:09:16 · 97 阅读 · 0 评论 -
循环控制_二分查找
二分查找思路:1、 规定要查找的值K可能在数组arr内下标区间a,b2、 计算区间a,b的中间点m3、 若k<arr[m],将区间缩小为a,m,继续二分查找4、 若k>arr[m],将区间缩小为m,b,继续二分查找5、 若k==arr[m],则找到元素位于位置m 难点:边界控制要注意的点:关于区间的选法半开半闭区间方便进行操作比如说:[a,b)+[b,c)=[a,c)是一个无...原创 2018-06-27 14:36:49 · 121 阅读 · 0 评论 -
使用循环删除结点
删除所有数值为2的结点思路:循环遍历链表,判断数值是否是2,是的话删除1、 定义循环不变式,把问题从中间切开,分成左右两部分,左边已经处理完毕,右边是待处理部分。删除2只要把3的指针指向5即可(所以我们要有一个指针previous指向3)删除后,previous指针仍然指向3,考虑是否删除的数值是5(维持了循环不变式的层层推进的过程) 要是数值为2,previous指针不变,要是不为2,prev...原创 2018-06-27 11:02:11 · 390 阅读 · 0 评论 -
使用循环反转链表
反转有100万元素的链表资源开销并不大,反转也不是特别复杂的事情,但是用递归的话,就会调用100万次栈,这对系统的开销就非常大,所以用循环的方法反转列表 在递归中,我们会把1元素拿出来,然后把2,3,4,5,进行递归但是在循环中,我们第一步是定义循环不变式,要定义一个断言使得在五次循环中都是成立的,要是把第1元素拿出来,就要处理很多边界条件,所以应该拿出中间随便的一个元素假设循环了3次,1,2,3...原创 2018-06-26 16:42:44 · 309 阅读 · 0 评论 -
使用递归列出所有元素组合
列出所有组合combinations([1,2,3,4],2); 可以从两个角度思考第一个角度:从中取出一个,然后再取出一个,这样频发的从数组中取走元素,效率不高第二个角度:先考虑第一个元素,选择取或者不取,取的话再在剩下的数组以此方法再取走一个(问题规模缩小),不取的话,除去第一个元素外,剩下的数组以此方法取走2个(问题规模缩小),如下所示:选1——combination([2,3,4],1)不...原创 2018-06-26 10:57:15 · 1337 阅读 · 0 评论 -
使用递归反转链表
链表反转:(图1)把问题规模减小,并且减小的量为1(图2)假设我们的程序能够正常的反转:则反转后为(图3)反转后,1元素并没有任何操作,所以反转1的next仍然指向2,(图4)假设2开头的链表已经反转成功,接下来只要将2的next指向1,(图5)而1的next指向null即可。(图6)看似复杂的问题,把如此多的指针反过来指,其实只要将两个节点反过来即可。代码如下:package com.sise....原创 2018-06-26 01:39:29 · 5935 阅读 · 1 评论 -
使用递归创建链表
创建列表:1、严格定义函数:给入一个数组,把数组里的每一个元素生成一个节点,然后让节点首尾相接,链表以null结尾,链表必须第一个结点点作为链表头。 2、先一般后特殊,定义函数Node CreateLinkedList(List<Integer> values)3、每次调用必须缩小问题规模4、每次问题规模缩小程度必须为1 把1拆掉,把2,3,4,5建立一个链表再把1接上 1和2,3...原创 2018-06-26 01:39:21 · 3826 阅读 · 2 评论 -
递归与循环书写方法
递归书写方法:1、 严格定义递归函数的作用,包括参数,返回值,Side-effectSide-effect:函数不仅操作参数和返回值还操作一些权值状态,程序运行本身也有可能对传入的参数进行改变,是执行程序的状态的变化,比较理想的做法是,在程序执行完之后没有Side-effect,即在运行中可以修改一些权值变量但在return的时候改回去2、 先一般,后特殊虽然最终函数逻辑和数学归纳法一样(有特...原创 2018-06-25 18:12:41 · 699 阅读 · 0 评论 -
ajax提交及防止用户重复提交
;var user_login_ops={ init:function () { this.eventBind(); }, eventBind:function () { $(".login_wrap .do-login").click(function () { var btn_target = $(this);...原创 2019-06-03 09:39:09 · 368 阅读 · 0 评论