- 博客(29)
- 资源 (20)
- 收藏
- 关注
原创 Leetcode dfs Path Sum
Path Sum Total Accepted: 20393 Total Submissions: 66674My SubmissionsGiven a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along
2014-08-31 20:13:02 956
原创 Leetcode 细节实现题 Spiral Matrix II
Spiral Matrix II Total Accepted: 12773 Total Submissions: 41526My SubmissionsGiven an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.For exampl
2014-08-31 17:03:27 701
原创 Leetcode 细节实现题 Spiral Matrix
Spiral Matrix Total Accepted: 12721 Total Submissions: 62094My SubmissionsGiven a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For ex
2014-08-31 16:29:30 709
原创 Leetcode 链表 Linked List Cycle II
题意:给定一个单链表,判断该链表中是否存在环,如果存在,返回环开始的节点思路:1.定义两个指针,快指针fast每次走两步,慢指针s每次走一次,如果它们在非尾结点处相遇,则说明存在环2.若存在环,设环的周长为r,相遇时,慢指针走了 slow步,快指针走了 2s步,快指针在环内已经走了 n环,则有等式 2s = s + nr => s = nr3.在相遇的时候,另设一个每次走一步的慢指针slow2从链表开头往前走。因为 s = nr,所以两个慢指针会在环的开始点相遇复杂度:时间O(n)struct
2014-08-30 23:04:02 703
原创 Leetcode 贪心 container with most water
题意:二维坐标系里有 n 个点 (i, ai), ai >= 0,从 (i, ai)到(i, 0)划竖线,共有 n 条竖线。找出两条竖线,使得它们构成的矩形的面积最大,矩形的高取决于最短的竖线。思路:贪心从首尾两个下标head 和trail 处开始扫描,用一个变量 maxArea 保持当前最大的矩形面积。如果head 指向的竖线短于 trail 的,则右移 head否则左移 trail计算面积,更新 maxArea复杂度:时间O(n),空间O(1)int maxArea(vector<in
2014-08-30 16:00:14 848
原创 Leetcode 细节实现 Rotate Image
题意:给定一个 n * n 的二维图像,将该图像顺时针旋转 90 度思路:先沿副对角线翻转一次,再沿水平中线翻转一次复杂度:时间O(n^2),空间O(1)void rotate(vector<vector<int> > &matrix){ int n = matrix.size(); //沿副对角线翻转 for(int i = 0; i < n; ++i){ for(int j = 0; j < n - i; ++j){ int i2 = n - 1 - j, j2 = n -
2014-08-30 15:29:41 739
原创 Leetcode 动态规划 Minimum Path Sum
题意:给定一个 m * n 的网格,网格中有非负的数字。一个机器人要从左上角走到右下角,每次只能向下或向右移动一个位置,找出一条总和最小的路径,返回最小值思路1:记忆化搜索使用一个两维 minPathSums[i][j]记录 (i,j)到(m,n)的总和最小的路径的值然后使用dfs 枚举复杂度:时间O(2^n) 空间O(n)思路2:dp设置状态为f[i][j],表示到达网格(i,j)的总和最小的路径的值,则状态转移方程为f[i][j] = min(f[i - 1][j] + f[i][
2014-08-30 13:14:18 863 1
原创 Leetcode 动态规划 Unique Paths II
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Paths II Total Accepted: 13655 Total Submissions: 49081My SubmissionsFollow up for "Unique Paths":Now consider i
2014-08-29 14:46:47 705
原创 Leetcode 动态规划 Unique Paths
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Paths Total Accepted: 17915 Total Submissions: 57061My SubmissionsA robot is located at the top-left corner of a m
2014-08-29 11:23:49 852
原创 Leetcode 高精度 Plus One
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenliePlus One Total Accepted: 17614 Total Submissions: 55852My SubmissionsGiven a non-negative number represented as an array
2014-08-29 01:58:01 1106 3
原创 Leetcode 动态规划 Candy
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieCandy Total Accepted: 16494 Total Submissions: 87468My SubmissionsThere are N children standing in a line. Each child is
2014-08-29 01:28:36 1586
原创 Leetcode 动态规划 Trapping Rain Water
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieTrapping Rain Water Total Accepted: 14568 Total Submissions: 50810My SubmissionsGiven n non-negative integers representin
2014-08-29 01:15:02 1293
原创 UNIX网络编程卷1 服务器程序设计范式8 预先创建线程,由主线程调用accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.程序启动阶段创建一个线程池之后只让主线程调用 accept 并把客户连接传递给池中某个可用线程。//用于维护关于每个线程基于信息的 Thread 结构typedef struct { pthread_t thread_tid; /* 线程 ID */
2014-08-27 11:42:06 1038
原创 UNIX网络编程卷1 服务器程序设计范式7 预先创建线程,以互斥锁上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.预先创建一个线程池,并让每个线程各自调用 accept2.用互斥锁取代让每个线程都阻塞在 accept 调用之中的做法//用于维护关于每个线程基于信息的 Thread 结构typedef struct { pthread_t thread_tid;
2014-08-26 11:54:24 1345
原创 UNIX网络编程卷1 服务器程序设计范式6 并发服务器,为每个客户请求创建一个线程
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.为每个客户请求创建一个线程,以取代为每个客户派生一个子进程/* include serv06 */#include "unpthread.h"intmain(int argc, char **argv){ int listenfd, conn
2014-08-26 11:51:58 1214
原创 UNIX网络编程卷1 服务器程序设计范式5 预先派生子进程,由父进程向子进程传递套接字描述符
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.只让你进程调用 accept,然后把所接受的已连接套接字“传递”给某个子进程。这样做就不用因为所有子进程都调用 accept 而需提供上锁保护2.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程传递新的套接字typedef struct { pid_t
2014-08-26 11:51:13 1426
原创 UNIX网络编程卷1 服务器程序设计范式4 预先派生子进程,以线程互斥锁上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.文件上锁文件系统操作,比较耗时2.线程上锁,不仅适用于同一进程内各线程之间的上锁,也适用于不同进程之间的上锁。3.在不同进程之间使用线程上锁要求:1)互斥锁变量必须存放在由所有进程共享的内存区中2)必须告知线程函数库这是在不同进程之间共享的互斥锁/*
2014-08-26 11:50:14 988
原创 UNIX网络编程卷1 服务器程序设计范式3 预先派生子进程,以文件上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.允许多个进程在引用同一个监听套接字的描述符上调用 accept 这种做法并不具备兼容性。解决的方法是让应用进程在调用 accept 前后安置某种形式的锁(lock),这样任意时刻只有一个子进程阻塞在 accept 调用中,其他子进程则阻塞在试图获取用于保护 accept
2014-08-26 11:30:17 993
原创 UNIX网络编程卷1 服务器程序设计范式2 预先派生子进程,每个子进程调用accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.预先派生子进程:在启动阶段预先派生一定数量的子进程,当各个客户连接到达时,这些子进程立即就能为它们服务。2.优点是无须引入你进程执行 fork 的开销就能处理新到的客户。缺点是父进程必须在服务器启动阶段猜测需要预先派生多少子进程。3.父进程可以持续监视闲置子进程
2014-08-25 21:56:06 892
原创 UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie1.传统并发服务器调用 fork 派生一个子进程来处理每个客户2.传统并发服务器的问题在于为每个客户现场 fork 一个子进程比较耗费 CPU 时间。/* include serv01 */#include "unp.h"intmain(int argc,
2014-08-25 21:55:21 992
原创 UNIX网络编程卷1 服务器程序设计范式0 迭代服务器
1.迭代 TCP 服务器总是在完全处理某个客户的请求后才转向下一个客户。2.从进程控制角度看迭代服务器是最快的,因为它不执行进程控制。/* include serv00 */#include "unp.h"intmain(int argc, char **argv){ int listenfd, connfd; void sig_int(int), web
2014-08-25 21:53:34 950
原创 UNIX网络编程卷1 回射客户程序 UDP 超时设置
最初代码:#include "unp.h"intmain(int argc, char **argv){ int sockfd; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: udpcli "); //1.指明服务器的 IP 地址和端口 bzero(&servaddr, s
2014-08-25 21:50:48 1166
原创 UNIX网络编程卷1 回射服务器程序 TCP服务器程序设计范式 四个版本
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie这是一个简单的回射服务器程序。它将客户发送的数据读入缓冲区并回射其中内容下面我会介绍同一个使用 TCP 协议的回射服务器程序的几个不同版本,分别是 fork 版本、select 版本、poll 版本、多线程版本fork 版本:为每一个客户连接派生(for
2014-08-25 21:25:07 905
原创 UNIX网络编程卷1 回射客户程序 TCP客户程序设计范式
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie下面我会介绍同一个使用 TCP 协议的客户端程序的几个不同版本,分别是停等版本、select 加阻塞式 I/O 版本、非阻塞式 I/O 版本、fork 版本、线程化版本。它们都由同一个 main 函数调用来实现同一个功能,即回射程序客户端。它从标准输入读入一行文本,写到服务器上,读
2014-08-25 21:20:45 912
原创 UNIX网络编程卷1 时间获取程序服务器 UDP 协议无关
/** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/#include "unp.h"#include <time.h>intmain(int argc, char **argv){ int sockfd; ssize_t n; char buff[MAXLINE]; time_t ticks; socklen_t len; struct sockaddr_storage cliaddr; //1.利用 Udp_s
2014-08-24 22:53:40 876
原创 UNIX网络编程卷1 时间获取程序服务器 TCP 协议相关性
最初代码: 这是一个简单的时间获取服务器程序。它和时间获取程序客户端一道工作。 TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_port --> sin6_port sin_addr --> sin6_addr#include "unp.h"
2014-08-24 22:53:03 1031
原创 UNIX网络编程卷1 时间获取程序客户端 UDP 协议无关
/*** UDP,协议无关,调用 getaddrinfo 和 udp_client**/#include "unp.h"intudp_client(const char *host, const char *serv, SA **saptr, socklen_t *lenp){ int sockfd, n; struct addrinfo hints, *res, *ressave; //1.调用 getaddrinfo //协议地址族为 AF_UNSPEC ,套接字类型为
2014-08-24 22:48:42 1150
原创 UNIX网络编程卷1 时间获取程序客户端 TCP 使用非阻塞connect
/*** TCP,使用非阻塞 connect**/#include "unp.h"intconnect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec){ int flags, n, error; socklen_t len; fd_set rset, wset; struct timeval tval; //1.调用 fcntl 设置套接字为非阻塞 flags = Fcntl(sockfd,
2014-08-24 22:47:23 1157
原创 UNIX网络编程卷1 时间获取程序客户端 TCP 协议相关性
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie最初代码: 这是一个简单的时间获取客户程序。客户与服务器建立一个TCP连接后,服务器以直观可读格式简单地送回当前时间和日期这个例子是协议相关,使用 inet_pton TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的
2014-08-24 22:46:34 1692
UNIX网络编程 卷1
2012-08-13
Android中文合集(126+8篇)
2011-10-05
java编程思想(第4版)
2011-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人