fast

TCP Fast Open: expediting web services

安稳与你 提交于 2020-12-26 09:21:13
Much of today's Internet traffic takes the form of short TCP data flows that consist of just a few round trips exchanging data segments before the connection is terminated. The prototypical example of this kind of short TCP conversation is the transfer of web pages over the Hypertext Transfer Protocol (HTTP). The speed of TCP data flows is dependent on two factors: transmission delay (the width of the data pipe) and propagation delay (the time that the data takes to travel from one end of the pipe to the other). Transmission delay is dependent on network bandwidth, which has increased steadily

链表排序--Sort List

…衆ロ難τιáo~ 提交于 2020-04-07 05:54:57
https://leetcode.com/problems/sort-list/ Sort List Sort a linked list in O ( n log n ) time using constant space complexity. 来自http://www.cnblogs.com/zuoyuan/p/3699508.html 南郭子綦 的解析 题目:链表的排序。要求:时间复杂度O(nlogn),空间复杂度O(1)。 解题思路:由于题目对时间复杂度和空间复杂度要求比较高,所以查看了各种解法,最好的解法就是归并排序,由于链表在归并操作时并不需要像数组的归并操作那样分配一个临时数组空间,所以这样就是常数空间复杂度了,当然这里不考虑递归所产生的系统调用的栈。      这里涉及到一个链表常用的操作,即快慢指针的技巧。设置slow和fast指针,开始它们都指向表头,fast每次走两步,slow每次走一步,fast到链表尾部时,slow正好到中间,这样就将链表截为两段。 1 # Definition for singly-linked list. 2 # class ListNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 # @param

55链表中环的入口结点

☆樱花仙子☆ 提交于 2020-03-28 00:02:53
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one. Example 1: Input: [1,3,4,2,2] Output: 2 Example 2: Input: [3,1,3,4,2] Output: 3 Note: You must not modify the array (assume the array is read only). You must use only constant, O (1) extra space. Your runtime complexity should be less than O ( n 2). There is only one duplicate number in the array, but it could be repeated more than once. 题目设定的问题是N+1个元素都在[1,n]这个范围内

环形链表

旧城冷巷雨未停 提交于 2020-03-23 21:46:44
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:tail connects to node index 0 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head = [1], pos = -1 输出:no cycle 解释:链表中没有环。 解题思路: 构建双指针第一次相遇: 设两指针 fast,slow 指向链表头部 head,fast 每轮走 2 步,slow 每轮走 1 步; 若 fast 指针走过链表末端,说明链表无环,直接返回 null(因为每走 1轮,fast 与 slow 的间距 +1,若有环,快慢两指针终会相遇); 当 fast == slow 时,代表两指针在环中 第一次相遇,此时执行 break 跳出迭代; 第一次相遇时步数分析: 设链 表头部到环需要走 a 步 , 链表环走一圈需要 b

LeetCode | 19. 删除链表的倒数第N个节点

你说的曾经没有我的故事 提交于 2020-03-21 09:23:54
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 解法: 老实用快慢指针,快指针先走n步,然后快慢一起走,直到快指针走到最后,要注意的是可能是要删除第一个节点,这个时候可以直接返回 head -> next class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(!head | !head -> next) return NULL; ListNode * fast = head, *slow = head; for(int i = 0; i < n; i++){ fast = fast -> next; } if(!fast){ return head -> next; } while(fast -> next){ fast = fast -> next; slow = slow -> next; } slow -> next = slow -> next -> next; return head; } }; 来源: https://www.cnblogs

如何去除有序数组的重复元素(快慢指针)

你离开我真会死。 提交于 2020-03-17 22:56:52
原文链接 如何去除有序数组的重复元素 我们知道对于数组来说,在尾部插入、删除元素是比较高效的,时间复杂度是 O(1),但是如果在中间或者开头插入、删除元素,就会涉及数据的搬移,时间复杂度为 O(N),效率较低。 所以对于一般处理数组的算法问题,我们要尽可能只对数组尾部的元素进行操作,以避免额外的时间复杂度。 这篇文章讲讲如何对一个有序数组去重,先看下题目: 显然,由于数组已经排序,所以重复的元素一定连在一起,找出它们并不难,但如果毎找到一个重复元素就立即删除它,就是在数组中间进行删除操作,整个时间复杂度是会达到 O(N^2)。而且题目要求我们原地修改,也就是说不能用辅助数组,空间复杂度得是 O(1)。 其实,对于数组相关的算法问题,有一个通用的技巧:要尽量避免在中间删除元素,那我就想先办法把这个元素换到最后去。这样的话,最终待删除的元素都拖在数组尾部,一个一个 pop 掉就行了,每次操作的时间复杂度也就降低到 O(1) 了。 按照这个思路呢,又可以衍生出解决类似需求的通用方式:双指针技巧。具体一点说,应该是快慢指针。 我们让慢指针 slow 走左后面,快指针 fast 走在前面探路,找到一个不重复的元素就告诉 slow 并让 slow 前进一步。这样当 fast 指针遍历完整个数组 nums 后, nums[0..slow] 就是不重复元素,之后的所有元素都是重复元素。 int

141. 环形链表

余生长醉 提交于 2020-03-17 04:45:24
环形链表 题目描述 public class Solution { public bool hasCycle ( ListNode head ) { if ( head == null || head . next == null ) return false ; ListNode slow = head ; ListNode fast = head . next ; while ( slow != fast ) { if ( fast == null || fast . next == null ) return false ; slow = slow . next ; fast = fast . next . next ; } return true ; } } 来源: CSDN 作者: qq_45100348 链接: https://blog.csdn.net/qq_45100348/article/details/104903574

迅捷 FAST FWR171-3G 实战OpenWRT

拟墨画扇 提交于 2020-03-15 05:06:14
FAST是TP-LINK的一个子品牌,所推出的FWR171-3G与TP-LINK wr703n的硬件采用相同规格,而前者要便宜20块,区别只在品牌、外观与软件界面。于是果断入手,然后尝试OpenWRT。 上手后第一件事,就是通过官方界面进行线路测试。目前的网络连接是,通过RJ45接口接入光猫进行PPPOE拨号,然后利用wifi信号完成无线路由功能。遗憾的是,通过官方界面进行拨号连接时提示密码错误,无法联通。于是,去找到了wr703n的固件刷上,文件是 wr703nv1_cn_3_12_11_up(110926)(Fast-FWR171-3G).bin 注意上传过程比较慢,上传和设备重启中不要断电或断开连接。 上传完成后,登入看到经典的蓝色TPlink界面,继续进行线路测试。经过测试,成功通过光猫PPPOE拨号。接下来就要进行OpenWRT的刷写了,首先下载文件 openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 升级,注意,升级完后就没有web界面了,若对命令行有畏难情绪,请谨慎操作。刷入后,就只能通过telnet连上,然后通过passwd指令设置root的密码,输入密码的时候默认没有回显,是正常情况,提示密码较弱的可以忽略或更换更高强度密码。使用passwd设置密码后,以后就不能用telnet进行连接,需要用ssh

用C#解决LeetCode环形链表

一世执手 提交于 2020-03-12 17:12:49
题目 思路 定义快、慢两个指针,遍历链表; 如果链表中不存在环,快指针会先到达尾部,返回false; 如果链表中最终未发现快指针与慢指针不相同,返回true。 代码块 /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public bool HasCycle ( ListNode head ) { if ( head == null || head . next == null ) { return false ; } ListNode slow = head ; ListNode fast = head . next ; while ( slow != fast ) { if ( fast == null || fast . next == null ) { return false ; } slow = slow . next ; fast = fast . next . next ; } return true ; } } 运行结果 来源

202:快乐数

江枫思渺然 提交于 2020-03-12 10:55:20
问题描述 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 示例 输入 : 19 输出 : true 解释 : 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 分析 这题一开始没啥思路,只能想到设定了一个阈值,大于这个阈值就默认为出不来了。返回false。(方法一) 后来发现这题是类似于带环的链表的问题,我们可以用快慢指针来做。快慢指针总能用来搞这种相遇问题。(方法二) 方法一 Java版 class Solution { public boolean isHappy ( int n ) { int count = 0 ; while ( n != 1 ) { if ( count > 100 ) { return false ; } int tmpN = 0 ; while ( n > 0 ) { tmpN += ( n % 10 ) * ( n % 10 ) ; n /= 10 ; } n = tmpN ; count ++ ; } return true ; } } 方法二 Java版 class Solution {