自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 快速排序

1.数组中的元素为0或1时返回2.选取枢纽元素pivot3.将数组S分成两个不相交的集合。切分:大于pivot的元素在左边,小于pivot的元素在右边。4.对[lo, pivot - 1] 区间内的数组排序,排序pivot,排序[pivot + 1,hi]数组。收益:类似归并排序,只不过快速排序是先切分,再递归;而归并排序则是向递归,在合并。inline static voidswap...

2020-05-05 17:35:42 198

原创

一、定义图: G = (V, E) 由一个顶点集V 和 边集 E 构成。术语:边:每一条边就是一副点对(v, w),其中v, w 属于 V。有时也把边称作弧。度:在有向图中可分为出度和入度。一个顶点有 n条边进入,其入度即为n;出度亦然。无向图中的度即为该顶点的边的数量。二、图的风格无向 和 有向:我们所探讨的图以无向为主。加权 和 无权:加权图中每条边(或每个顶点)会赋以数值...

2020-05-03 14:04:33 209

原创 LeetCode1391 :检查网络中是否存在有效路径

分析:路径选择,一定是在上下左右中选择一条,如果存在路径的话,对每一条可行的路径进行测试;如果都不可选择的话,则不存在路径。我们先确定当前位置,查看当前位置上该往哪走,然后再往相应的方向上行进,进入下一个。因为在每个位置上,其下一步是固定不变的,我们只需在上下左右中寻找到符合其行走条件的路径即可(如果存在的话)。bool helper(int** grid, int gridSize, int...

2020-05-03 00:22:57 263

原创 LeetCode1319:连通网络的操作次数

分析:线的数量就是connections的值,而连接n台计算机至少需要 n - 1条线。判断是否重复连线,只需判断两台计算机是否已经在同一个网络中。如果已经相连,则把线取下。1.遍历整个connections2.计算有多少个集合,以及有多少剩余的线3.集合数量-1即为最少操作次数,与剩余的线的数量进行比较即可int makeConnected(){ 初始化并查集 for (遍历...

2020-05-02 17:55:08 138

原创 二叉搜索树的增删查改

在实际生产中,一棵二叉搜索树的平均深度是log(N),所以通常是递归的编写二叉树的操作代码,不需要太担心爆栈的问题。对二叉树的所有操作,无非就是从根节点、左子树、右子树这三者中入手,分析基本的、可能的情况后,再递归的编写相应的操作即可。我们的重点放在...

2020-04-26 19:25:21 375

原创 TCP/IP详解:卷1:协议 | 第二章 链路层

链路层预备知识链路层有三个目的:1)为IP模块发送和接受IP数据报;2)为ARP模块发送ARP请求和接受ARP应答;3)为PARP发送PARP请求和接收PARP应答。链路层协议:以太网,令牌环网,点对点协议1.1以太网和IEEE 802封装以太帧类型:以下摘自维基百科以太帧有很多种类型。不同类型的帧具有不同的格式和MTU值。但在同种物理媒体上都可同时存在。以太网第二版[no...

2020-04-20 13:50:37 412

原创 LeetCode LCP 01 | 传递信息

问题描述小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下:有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家(也可能没有)。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。每轮信息必须需要传递给另一个人,且信息可重复经过同一个人给定总玩家数 n,以及按 [玩家编号,对应可...

2020-04-19 18:15:57 258

原创 TCP/IP详解:卷1:协议 | 第一章 概述

第一章 概述1.1分层分层标准:按照功能进行分层,可将1)

2020-04-18 22:14:41 246

原创 LeetCode.74 | 搜索二维矩阵

问题:在有序的二维数组中寻找目标值类型:数组搜索问题分析:有序数组查值,最快的是二分搜索。1.可以使用二分搜索寻值,但是数组为二维数组,找中间值mid的索引不方便。解决方案就是,先算出mid,将其转换为对应的二维索引,可得matrix[mid/col][mid%col],该位置上的值即为中间值。时间复杂度:O(log(mn)),m行数,n为列数空间复杂度:O(1)2.第二种二分查找则...

2020-04-18 16:49:19 138

原创 LeetCode:1011 | 在D天内送达包裹的能力

没啥好说的,船的载重量一定在max(weights)到sum(weights)之间,且是有序的,二分查找直接上。只不过要注意的是,目标值应该为天数,所以在选定一个mid后,下一步要计算在mid时所需耗费的天数。然后与天数进行比较。技巧:计算天数,不仅可以加,也可以减,放满一只船后,天数要减一。把货物放进船里,不仅可以加,也可以减,即放进一个货物后,船的载重量减少。操作步骤:在weights...

2020-04-17 16:33:11 180

原创 合并K个链表

思路:借鉴《算法4》上的自底向上的归并排序1.从1开始,两两合并,然后四四合并,八八合并,直到链表数量为一时间复杂度:O(Nlogk)空间复杂度:O(1)#define less(X,Y) ((X)<(Y)?(X):(Y))void merge(struct ListNode** lists,int start,int mid,int end){ //判断最后是否只剩一个链表,...

2020-04-17 16:09:05 112

原创 IP协议

Why is the IP service so simple?*Simple,dumb,minimal:Faster,more streamlined and lower cost to buile and maintain.*The end to end principle:Where possible,implement features in the end hosts.*Allow...

2020-04-13 14:06:52 104

原创 memcpy()函数的特性和功能

函数原型:void* memcpy(void* dst,const void* src,size_t size);函数作用:将src所指的内存单元拷贝到dst所指的内存单元,一共拷贝size个字节。如果src和dst存在重叠区域,其行为是未定义的。但是可以肯定的是,无法完整的把src的内存区域拷贝到dst,dst区域中将会存在重复的元素。注:所谓的重叠是指dst指向src内存区域中的某个单元,...

2020-04-13 10:52:22 638

原创 leetCode445:两数相加II

1.算术从低位到高位,所以需要从后往前算,但是链表只能从前往后遍历。因此使用后进先出的栈,先将链表节点入栈,最后在同时出栈。时间复杂度:O(n)空间复杂度:O(n+m)栈空间加上新链表的空间2.也可以先对两个链表进行反转,再从头节点开始进行计算。时间复杂度:O(n)空间复杂度:O(n)n为新链表的空间/** * Definition for singly-linked list. ...

2020-04-12 18:36:27 94

原创 LeetCode21:合并2个有序链表

链表已经有序,可使用双指针l1和l2,分别指向第一个和第二个链表。再设置一个指向新链表头节点的指针,以及维护一个指向新链表最后一个节点的指针。使用双指针遍历遍历两个链表,比较后将节点添加到新链表的末尾。反思:知道要使用双指针,但是并未想到设置哨兵和尾指针(指向新链表)。一开始的思路是将第二个链表的节一 个一个插入到第一个链表中。所以插入有三种情况:(1)在表头(2)在中间(3)在表尾。麻烦且容...

2020-04-11 20:20:45 100

原创 leetcode2:两数相加

分析:求两个链表相加的和,运算从低到高,即从头节点开始向后运算。所需考虑的是当前两个链表是否已经遍历完成,以及当前是否需要进位。步骤:1.设置两个指针分别指向l1和l2的头节点2.开一个新链表,维护一个指向新链表的尾指针3.插入节点:a.从l1和l2中选出两个节点-b.算出当前节点的值-c.判断是否需要进位(当前节点是否大于10)-d.建立节点,连接到新链表中/** ...

2020-04-11 17:35:07 99

原创 C语言内存之字符串

给定一段代码如下,其输出是什么?#include<stdio.h>#include<string.h>int main(void){ char d[]="qwertyuioplkjhgfdsazxcvbnm"; char s[]="qwe"; strcpy(s,d); //printf("%p\t%p\n",d,s); printf("%s\n%s\n"...

2020-04-10 09:57:46 202

原创 自底向上的归并排序

参考0参考1方法:自底向上的归并排序算法的思想就是数组中先一个一个归并成两两有序的序列,两两有序的序列归并成四个四个有序的序列,然后四个四个有序的序列归并八个八个有序的序列,以此类推,直到,归并的长度大于整个数组的长度,此时整个数组有序。需要注意的是数组按照归并长度划分,最后一个子数组可能不满足长度要求,这个情况需要特殊处理。自顶下下的归并排序算法一般用递归来实现,而自底向上可以用循环来实现...

2020-04-09 19:50:21 1100

原创 LeetCode18:四数之和

int less(int a,int b){ return (a<=b)?a:b;}void Merge(int* nums,int start,int mid,int end){ if(end<=mid) return ; int fir,sec,count; fir=start,sec=mid+1,count=0;...

2020-04-09 19:31:57 97

原创 定义为数组,引用为指针问题

test.c#include<stdio.h>extern char* array;int main(void){ printf("%p\n",array); printf("%s\n",(char*)array); return 0; }main.c#include<stdio.h>char array[]="abcd";编译输出:思考...

2020-03-27 13:18:29 220

原创 LeetCode##70:爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶...

2020-03-26 14:43:36 68

原创 LeetCode#1;

题目要求:给定一个数,在数组中寻找两个数的和等于目标数。分析:(1)暴力枚举:从第一个元素开始,对每一个数进行测试,然后再寻找后面的元素中是否有能满足条件的。时间:O(N^2);空间:O(1);(2)HashMap:在暴力枚举中我们在发现确定一个元素后,我们在该元素之后的遍历实际上就是一个****查找的过程,而能查找效率最快的莫过于哈希表,平均时间只需要O(1).而我们想要找的元素=目标数...

2020-03-22 18:27:15 77

原创 LeetCode-905:按奇偶排序数组

LeetCode905: 给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。问题分类:数组问题;前后排序归类;问题分析:数组问题一般都需要用到双指针(快慢指针,首尾指...

2020-03-22 09:58:18 135

原创 双向链表的insert问题

双向链表的insert问题:如果insert一个Item,则需要先给他找到一个合适的位置。找到之后再分配空间,再把item加入到节点的储存item的空间中。现在,就需要给新建的newnode设置指向。总共需要考虑4种情况:(1)为空链表(2)在链表的起始处(3)在链表的中间位置(4)在链表的末尾要想成功insert新节点,需要改动四个指针。(1)newnode->fwd(2)new-...

2019-09-16 11:10:53 315

原创 二分查找

二分查找查找元素e是否存在序列中循环不变式为A[0,lo]<=e<=A[hi,n)当lo=0,hi=n时,则有A[lo]<=e<=A[hi]若e存在于序列中当lo=hi时,则有A[lo]=A[hi]=e;若此时A[lo]=A[hi]!=e,则说明元素e不存在于序列中。代码如下:Int BinaSearch(int *A,int lo,int hi,...

2019-09-16 11:09:33 144

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除