挑战面试编程:查找数组中第k大的数 查找数组中第k大的数问题: 查找出一给定数组中第k大的数。例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8……思路: 1. 直接从大到小排序,排好序后,第K大的数就是arr[k-1]。 2. 只需找到第k大的数,不必把所有的数排好序。我们借助快速排序中partition过程,一般情况下,在把所有数都排好序前,就可以找到第k大的数。我们依据的逻辑是,经过一次
LeetCode-Linked List Linked ListLinked ListSwap Nodes in PairsSort ListRotate ListReverse Nodes in k-GroupReverse Linked ListReverse Linked List IIReorder ListRemove Nth Node From End of ListRemove Linked List Ele
linux系统编程:线程同步-信号量(semaphore) 线程同步-信号量(semaphore)生产者与消费者问题再思考在实际生活中,只要有商品,消费者就可以消费,这没问题。但生产者的生产并不是无限的,例如,仓库是有限的,原材料是有限的,生产指标受消费指标限制等等。为了进一步,解决好生产者与消费者问题,引入信号量进机制。信号量信号量(semaphore)是互斥量的升级版:互斥量的状态为0或1,而信号量可以为n。也就是说,使用互斥量时,最多允许一个线程进入关键区,而信号量允许多个,具体值是信号量当前的内部值。相关函数
linux系统编程:线程同步-条件变量(cond) 线程同步-条件变量生产者与消费者问题再引入条件变量之前,我们先看下生产者和消费者问题:生产者不断地生产产品,同时消费者不断地在消费产品。这个问题的同步在于两处:第一,消费者之间需要同步:同一件产品只可由一人消费。第二,当无产品可消费时,消费者需等待生产者生产后,才可继续消费,这又是一个同步问题。详细了解:生产者消费者问题。条件变量条件变量是利用线程间共享的全局变量进行同步的一种机制,并且条件变量总是和互斥锁结合在一起。相关函数
linux系统编程:线程同步-读写锁(rwlock) 线程同步-读写锁(rwlock)读写锁读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。pthread_rwlock_tpthread_rwlock_initpthread_rwlock_destroypthread_rwlock_rdlockpthread_rwlock_wrlockpthread_rwlock_tryrdl
linux系统编程:线程原语 线程原语线程概念 线程(thread),有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。更多详细解释看百度百科:线程。在Linux shell下通过命令 $ ps -Lf pid 查看指定pid号下的所有线程。线程之间的共享与非共享这里的线程是指同一进程下的线程。共享: 1.文件描述符表 2.每种信号的处理方式 3.当前工作目录 4.用户ID和组ID
linux系统编程:进程原语 进程原语1. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 2. 进程环境 在libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。用以下代码可以查看当前进程的所有环境变量的信息。
linux系统编程:进程间通信-mmap 进程间通信-mmap#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *addr, size_t length); mmap本质是把内存与硬盘上的文件同步。某块内存中的内容会同步到硬盘文件上,即把文件映射到内存。故通过对同一文件的读写达到进程间的通信。参数解释:addr:指定对哪儿块内存实行映射。NULL表示
linux系统编程:进程间通信-pipe 进程间通信-pipe进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。pipe管道(pipe)就是一项基本的进程间通信的方法。
前缀、中缀、后缀表达式 前缀、中缀、后缀表达式1.定义所谓的前、中、后,是指表达式中运算符相对于运算对象的位置。中缀运算符位于运算对象中间,即是中缀表达式。如(1+2)*3-4最普遍的、最易被人脑理解的是中缀表达式。前缀运算符位于运算对象之前,即是前缀表达式。如-*+1234后缀运算符位于运算对象之后,即是后缀表达式。如12+3*4-2.总结前缀、后缀不易被人脑理解,但易于被计算机解析。只有对中缀表达式进行合理的转换,才可得到相应的前、后缀表达式。