题目描述 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 输入:head = [1,2,3,4,5], k = 3 输出:[3,2,1,4,5] 输入:head …

2021年3月7日 0条评论 353点热度 0人点赞 agedcat_xuanzai 阅读全文

题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制 0 <= 节点个数 <= 5000 这道题很经典,直接原地反转就可以。代码的编写可以分为递归和非递归两种。 解法一——非递归 struct ListNode { int val; struct ListNode* next; ListNode(int x…

2021年3月6日 0条评论 285点热度 1人点赞 agedcat_xuanzai 阅读全文

内存溢出 内存溢出(out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory错误;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 而内存溢出的一大原因就是因为内存泄露。 内存泄露 内存泄露(memory leak),是指程序在申请内存后,无法释放已申请的内存空间。 内存泄露我们通常关注两类情况: 堆内存泄漏 (Heap leak):堆内存指的是程序运行中根据需要通过malloc,realloc new等从堆中分配的一块内存,再是完…

2021年3月6日 0条评论 254点热度 1人点赞 agedcat_xuanzai 阅读全文

进程与线程的区别 前面的文章对进程和线程做了详细的阐述,现在让我们总结一下线程和进程的区别。 一个线程只能属于一个进程,而一个进程可以有多个线程。进程至少有一个线程。线程依赖于进程而存在。 进程是CPU资源分配的最小单位,线程是CPU调度的最小单位。 进程有独立的系统资源,而同一进程内的线程共享进程的大部分系统资源。资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有一些在运行中必不可少的资源,如栈段,…

2021年3月6日 0条评论 389点热度 2人点赞 agedcat_xuanzai 阅读全文

进程间通信 进程经常需要与其他进程通信。最典型的例子是,在一个shell管道中,第一个进程的输出必须传送给第二个进程,这样沿着管道传递下去。我们有必要了解进程间通信的相关知识。 进程通信(IPC)就是进程间的数据交换,通常可以分为低级通信方式和高级通信方式。 低级通信方式:进程互斥与同步交换的信息量较少且效率较低,因此称这两种进程通信方式为低级进程通信方式,相应地也将P、V原语称为两条低级进程通信原语。 高级通信方式:高级通信方式是指以较高效率传递大量数据的通信方式。高级通信方式主要可分为共享通信(共享存储器系统通…

2021年3月6日 1条评论 910点热度 2人点赞 agedcat_xuanzai 阅读全文

同步与互斥 相关概念 临界资源:一段时间内仅允许一个进程使用的资源称为临界资源。 竞争条件:两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,类似这样的情况称为竞争条件。 临界区:进程中访问临界资源的那段代码称为临界区。 同类临界区:所有与同一临界资源相关联的临界区。 同步(Synchronization):多个相互合作的进程在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步。 互斥:当一个进程正在使用某资源时,其他希望使用该资源的进程必须等待,当该进程用完资源并释放后,…

2021年3月5日 1条评论 565点热度 1人点赞 agedcat_xuanzai 阅读全文

线程 进程的一种理解是一个可以实现计算的虚拟机框架,执行的活跃元素由执行引擎提供。在传统操作系统中仅允许进程包含一个执行引擎。而在现代操作系统中,进程可以包含多个执行引擎。每个执行引擎称作线程。现在让我们了解一下线程。 为什么要引入线程 在操作系统中引入进程的目的是使多道程序能并发执行,以改善资源利用率及提高系统吞吐量; 在操作系统中再引入线程,则是为了减少程序并发执行所付出的时空开销(诸如创建、撤销、切换等一系列操作所花费的时空开销),使操作系统具有更好的并发性。 线程的定义 线程的定义也有很多不同的提法,下面列…

2021年3月5日 1条评论 430点热度 1人点赞 agedcat_xuanzai 阅读全文

进程 操作系统中最核心的一个概念是进程:这是对运行程序的一个抽象。操作系统的其他内容都是围绕进程展开的。为此,我们有必要了解进程。 为什么要引入进程的概念 在没有引入进程的概念的时候,一个程序是怎样运行的呢?一个程序通常由若干个程序段所组成,它们必须按照某种先后次序来执行,仅当前一个操作执行完后才能执行后续操作。这样无疑对宝贵的系统资源存在极大的浪费。 那么怎样提高系统资源的利用率呢?答案就是程序的并发执行。也就是说,若干个程序或者程序段同时在系统中运行。这些程序(或程序段)的执行在时间上是重叠的,一个程序(或程序…

2021年3月5日 1条评论 457点热度 2人点赞 agedcat_xuanzai 阅读全文

史上最全最详细的计算机操作系统知识结构图,提供下载: Download PDF.

2021年3月4日 1条评论 424点热度 3人点赞 agedcat_xuanzai 阅读全文

题目 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。 示例 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2 输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5 输入:nums1 = [0,0], nums2 = [0,0] 输出:0.00…

2021年3月3日 2条评论 438点热度 4人点赞 agedcat_xuanzai 阅读全文