- 博客(31)
- 资源 (12)
- 收藏
- 关注
原创 Leetcode 215 Kth Largest Element in an Array
1. 问题描述 找出数组中第k大的数,注意:数组为无序数组。 2. 方法与思路 是一道经典算法题。解法也有好几种,一种是先进行排序,然后取出第k大的数;由于排序算法最快效率为O(nlogn)O(nlogn),所以整体效率为O(nlogn)O(nlogn)。二是使用优先队列,SLT中有优先队列的用法,内部是以堆的方式实现。时间效率也比较高,O(nlogn)O(nlogn)。 class
2015-06-28 18:29:56 5394
原创 Leetcode 216 Combination Sum III
1. 问题描述 找出所有k个数字的组合,使它们的和为n。设所有的数都为1~9,且没有重复数。结果要保持升序。 2. 方法与思路 采用回溯法可以很好地解决这个问题。 class Solution {public: int target,kk; vector<vector<int> > v;public: void traceback(int start, i
2015-06-28 17:38:51 5624
原创 渗透测试之学习使用metasploit
1. 介绍 Metasploit为渗透测试人员提供了大量友好、容易使用的工具。metasploit最初有HD Moore创建,后来被Nexpose漏洞扫描器的Radid7公司收购。在渗透测试过程中,可以手工完成的一些工作都可以通过metasploit来做。 Metasploit需要经常地更新,已维护最新的攻击库。可以每周运行以下命令更新metasploit。 # msfupdate2
2015-06-28 15:01:23 9176 1
原创 leetcode 1 Two Sum
1. 问题描述 在给定的数组nums[]nums[]中找出两个数,他们的和target。(满足numsi+numsj=targetnums_i + nums_j = target。返回这两个数在数组中的位置,起始位置为1。且i<ji < j。 2. 方法与思路 第一遍扫描,建立hash映射;考虑到数组中可能有numsi=numsjnums_i = nums_j的情况,映射结构为map<in
2015-06-27 15:31:21 5606
原创 Leetcode 6 ZigZag Conversion
1. 问题描述 给定一个字符串和一个行数,表示按照zigzag的方式扫描的结果,编写算法输出按行扫描的结果。 2. 方法与思路 首先要先明白zigzag的顺序, 明白了zigzag扫描后,要确定zigzag中字符和按行扫描字符的对应关系。有两点: 1). 每行中的列元素都会有对应的间隔span =2∗row−22*row-2,例如行为4的zigzag扫描
2015-06-27 11:46:18 5734
原创 Leetcode 227 Basic Calculator II
1. 问题描述 给遗传字符串类型的表达式,计算表达式的值。表达式只包含+、-、*、/和空格。 2. 方法与思路 此题和Basic Calculator I类似,只是左右括号换成了乘除符号。基本的做法依然是先转成后缀表达式的形式,然后在进行计算。 后缀表达式用vector<long> postfix的结构存储,为了方便,操作符和操作数都保存在postfix向量中,为了区分,操作数都以负
2015-06-27 11:10:43 6402
原创 Leetcode 228 Summary Ranges
1. 问题描述 给定一个升序的数组nums[](不包含重复数),求出数组中数字的范围。例如给定[0,1,2,4,5,7],返回[“0->2”,”4->5”,”7”]。2. 方法与思路 此题比较容易,只需要设一个计数器cnt,初值为nums0nums_0,然后循环遍历数组,cnt累加并与numsinums_i比较,如果相同则继续,否则将范围插入到要返回的向量中。注意处理只有一个数的情况。 c
2015-06-26 13:34:50 6050
原创 python 解析HTML
1. 理解网页上的数据网页上的数据主要有: HTMLXHTMLXMLJSON需要一个接受数据并解析的机制需要一个产生数据并发送的机制2. 解析HTML层次化的数据有多个解析HTML的第三方库,例如:LXML,BeautifulSoup,HTMLParser等等。解析HTML所面临的问题: 没有统一的标准。很多网页并没有遵循HTML文档2.1 BeautifulSoup
2015-06-25 21:36:07 9957
原创 Leetcode 217 Contains Duplicate
1. 问题描述 在一个给定的数组中,判断是否含有重复的数。2. 方法与思路 很容易的一个题目,直接hash判断即可,没有难度。 class Solution {public: bool containsDuplicate(vector<int>& nums) { if(nums.size() <= 0) return false; unordered
2015-06-25 17:04:19 5532
原创 Leetcode 218 The Skyline Problem
1. 问题描述 Notes:The number of buildings in any input list is guaranteed to be in the range [0, 10000].The input list is already sorted in ascending order by the left x position Li.The output list m
2015-06-25 16:44:14 8328
原创 Leetcode 219 Contains Duplicate II
1. 问题描述 给定一个整数数组nums[],查找是否存在两个下标i和j,满足numsi=numsjnums_i = nums_j 且|i−j|≤k|i-j| \le k。2. 思路与方法 这个问题比Contains Duplicate III要简单一些,思路方面可以参考上一篇文章Contains Duplicate III。采用“滑动窗口”+哈希的方法。不同的是,在窗口范围内只要找到满足has
2015-06-24 21:45:12 6136
原创 Leetcode 220 Contains Duplicate III
1. 问题描述 给定一个整数数组nums[],查找是否存在两个下标i和j,满足|numsi−numsj|≤t|nums_i-nums_j| \le t 且 |i−j|≤k|i-j| \le k。2. 方法与思路 总得思路就是:“滑动窗口”+unordered_map。 推理过程如下: |numsi−numsj|≤t⇒|numsi/t−numsj/t|≤1|nums_i-nums_j|
2015-06-24 19:38:02 8935 1
原创 Leetcode 221 Maximal Square
1. 问题描述 给出一个二维的01矩阵,计算出包含1做多的方阵,并返回包含1的个数。 2. 方法与思路 利用动态规划的思想。以右下角基准,找出最大边长。状态转移方程如下: dp[i][j] = min(d][i-1][j], dp[i][j-1], dp[i-1][j-1]) +1; 其中dp[i][j]表示以(i,j)为右下角的全1矩阵的最大边长。 class Solu
2015-06-23 11:19:27 6871
原创 leetcode 222 Count Complete Tree Nodes (计算完全二叉树节点数)
1. 问题描述 计算完全二叉树的节点数。对于完全二叉树的定义可参考wikipedia上面的内容。2. 方法与思路 最简单也最容易想到的方法就是使用递归,分别递归计算左右子树的节点数的和。但此方法最容易超时,一般不可取。 int countNodes(TreeNode* root) { if(root == NULL) return 0; else if(ro
2015-06-22 14:17:37 8569
原创 Leetcode 223 Rectangle Area
1. 问题描述 求两个矩形并的面积。 2. 方法与思路 可以先求出两个矩形的交面积,然后用两个矩形面积的和减去交面积即为矩形并面积。 注意:虽然面积不超过int的最大值,但中间边长运算时可能超过,注意处理细节,否则容易溢出。 class Solution {public: int computeArea(int A, int B, int C, int D, int
2015-06-21 12:27:50 7209
原创 leetcode 224 Basic Calculator
1. 问题描述 计算字符串表达式的值,表达式中只含有(,),+,-,空格和非负整数。例如: “1 + 1” = 2 ” 2-1 + 2 ” = 3 “(1+(4+5+2)-3)+(6+8)” = 23 原文链接:https://leetcode.com/problems/basic-calculator/2. 方法与思路2.1 利用后缀表达式计算 一种思路是按照常规的方法
2015-06-21 00:39:33 7630 2
原创 leetcode 225 Implement Stack using Queues
1. 问题描述 用队列来模拟栈的操作。实现如下栈操作: push(x) 将元素x入栈。pop() 出栈。top() 获取栈顶元素。empty() 判断是否为空。 注意:只能用队列的标准操作,队头取元素,队尾插入元素,获取队列的大小,以及队列是否为空。2 方法和思路 可以用两个队列q1和q2来实现栈的操作,设q2为辅助队列。 入栈时将元素都存入q1队列中。出栈时将q1中
2015-06-20 10:17:25 7033
原创 Leetcode 226 Invert Binary Tree
1.问题描述 交换二叉树的左右子树。 2. 方法思路 直接递归交换左右子树即可,c代码如下: /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * };
2015-06-19 23:23:51 7248
原创 找出数组a[]中符合a[i]+a[j]=K的数对
1.问题描述 在一个整数数组中,元素都为整数,没有重复数。设计一个算法找出满足两个数的和等于k值得数对。例如a[]={1,3,8,6,4}中两个数的和为7的数对为(1,6)和(3,4)。2. 解决方案2.1 暴力法 首先先到的可能就是暴力法,暴力没举出所有的数对然后再判对他们的和是否为K,但这种方法的时间复杂度为O(n^2),效率比较低,一般不可取。代码也就不写了。、2.2 二分法 先对数组进
2015-06-19 19:18:11 10615
原创 python 抓取网页
1. 主要内容 此部分的主要内容包括:抓取网页的的基本方法。使用urllib和urllib2库。可以使用参数编码。2. 代码举例2.1 基本的抓取 使用sudo python命令,进入python环境。在此之前可以自己搭一个web服务器,专门做测试用。我在我的一个Ubuntu系统中搭建了LNMP环境,地址为192.168.1.33。 其实python代码很简洁,抓取一个网页只需要两
2015-06-18 21:18:34 7881
原创 mac OS X下终端使用tree命令列目录
1. 问题描述 相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构。不过有是有并不是系统本身就自带的,如果需要的话,Ubuntu下可执行下列命令安装。 sudo apt-get install tree 那么在mac的OS X系统中如果还想使用tree这个命令,可以参考下下面的解决方案。2. 解
2015-06-18 17:39:38 17730
原创 求连续数组中唯一重复的元素
1. 问题描述 数组a[n],1到n-1这n-1个数放在这个数组中,其中有一个数重复一次。写一个算法找出这个数来。2. 方法与思路2.1 累加和法 采用数学求和的方法,由于数组中只有一个数是重复的,且又是连续的,根据累加和原理,对数组求和然后减去1到n-1的和即为所求的重复数。 int OnlyRepeat_Sum(int a[],int len){ int i,re = 0;
2015-06-15 10:49:18 8624 2
原创 渗透测试漏洞利用之漏洞攻击
1. 查找目标系统的相关漏洞 在前一篇渗透测试的博文中,介绍了目标系统相关信息的收集方法。接下来,任意Kioptrix靶机为例,具体介绍下相关漏洞的详细利用过程。 在exploit-db.com网站上,一般能够找到已知漏洞的有价值的信息,以及验证其有效性的概念验证代码(POC)。概念验证代码可以帮助你理解这个漏洞的原理和形成机制,从而让你能够确定防护措施是否正常工作。2. 离线的漏洞库 在
2015-06-14 23:47:50 14263
原创 渗透测试之手动漏洞利用
1. 实验环境描述 为了做漏洞利用的实验,前一片文章我已经介绍了Kioptrix靶机的安装和网络的配置。现在看一下虚拟机里必要的两个系统:Kioptrix虚拟机和Kali Linux虚拟机。前者为靶机,后者作为攻击机使用。网络拓扑如下图所示: 2. 列举服务 首先我们使用nmap命令对网络中的机器进行扫描,输入以下命令对192.168.50.0/24网段上所有的IP和TCP端口进行扫描。
2015-06-11 01:24:55 11787
原创 渗透测试之漏洞利用开启篇
1. 漏洞利用目的 简单的了解网络中已知的漏洞,对网络和系统的综合安全控制是不够的。进行针对性的,全面的漏洞测试是有很多好处的。 跳出安全工作的猜测和怀疑。 通过提供关键基础设备的入侵而导致敏感数据泄露或更改,使安全问题引起重视,管理团队也可以获得实施补救措施的必要细节。验证防护措施的安全性。 漏洞利用渗透测试可以验证理论上防御控制的安全性,是管理者能够证明采取的
2015-06-09 23:26:28 8932
原创 求数组中重复次数最多的元素
1.问题描述 例如:数组a={2,3,1,5,5,5,5,7,8,1},元素2、3、7、8各出现1次,1出现两次,5出现4次,则重复次数最多的元素为5.2. 方法与思路2.1 以空间换时间,索引法 定义一个数组int cnt[MAX],将其元素全部初始化为0。然后遍历数组a,执行cnt[a[i]]++操作。最后在cnt数组中找最大的数,对应的数即为重复次数最多的数。 代码示例如下:
2015-06-08 21:32:05 16407 4
原创 python 使用scapy编写DNS Fuzzer
1. 描述 使用scapy库,编写一个DNS Fuzzer工具,并测试。在这之前,先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中,且UDP的端口为53。进入scapy,查看一下UDP和DNS包的封装情况。 2. 代码示例 代码中,我们需要对输入的IP地址做合法性校验。这需要用到netaddr中的valid_ipv4,可以执行sudo pip install
2015-06-08 10:35:28 12027 1
原创 python 使用scapy进行ARP扫描
一. 描述 使用scapy第三方库,编写一个可以对一个网段进行ARP扫描,获得该往段内活跃主机的IP地址和MAC地址。二. 分析与方案首先,从scapy导入相关的模块。Ether()/ARP()构造ARP包。srp1()发送与接收ARP包。代码示例如下:#!/usr/bin/env python# _*_ coding=utf-8 _*_from scapy.all import *i
2015-06-08 09:16:58 20351
原创 求两个有序整型数组的交集
1. 问题描述 有两个有序的整型数组a和b(没有重复元素),他们的长度分别为lenA和lenB,求出他们的共同元素。 例如:a = 0,1,3,5,7,9,11;b = 2,3,4,7,11; 它们的交集为{3,7,11}。2. 方法思路 求交集的方法有很多种,但数组的长度会影响算法的效率。2.1 长度相当时,可采取的算法2.1.1 二路归并 对于数组a,b分别以i,j从头遍历数组
2015-06-06 22:55:58 15523 2
原创 python 使用scapy进行帧注入
1. 描述 使用scapy进行以太网帧的注入,相对于RAW_SOCKET还是比较简单的。在讲述packet注入之前,先了解一下scapy伪造以太网帧的相关知识。下图为以太网帧格式和scapy对应的封装包格式。 2. 示例2.1 使用scapy构造IP数据包 进入scapy环境,输入以下代码: >>> >>> pkt = IP()/ICMP()/”hello” >>
2015-06-06 20:23:05 11448
原创 二分法计算有序数组中数字出现的次数
1. 问题描述 在给定的一个已经排好序的数组中,找出指定数字出现的次数。例如数组[1,2,3,4,4,4,4,6,8,9]中4出现的次数为4次。2. 思路与方法 此问题可以在二分法的基础上进行改进。假设数组a为递增的数列,需要查找的数字为num,可以分别查找num在数组a中出现的起始位置和最后一次的位置,通过二者的差计算出数字num在数组a中出现的次数。 c++代码如下:#include
2015-06-03 21:12:09 11121 1
Qt入门案例记事本
2014-01-20
《计算机网络高分笔记》
2012-02-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人