- 博客(14)
- 资源 (63)
- 收藏
- 关注
原创 GEEK编程练习— —格雷码
题目格雷码是一种二进制数值系统。在一组数的编码中,任意两个相邻的代码只有一位二进制数不同。给定一个非负整数n表示格雷码的位数,输出所有格雷码。 格雷码序列从0开始。格雷码不唯一。输入2输出00011110分析结果要输出二进制形式,可以使用bitset,这里设置最大位数为128位,可根据情况修改。格雷码公式为a ^ (a - 1)代码#include <iostream>#include <
2016-05-31 22:50:42 4625 1
原创 GEEK编程练习— —雨水存储问题
题目给定n个非负整数,分别代表围栏的高度,计算给定的这组数字代表的围栏能够容纳多少水,如图所示。输入0 1 0 2 1 0 1 3 2 1 2 1 输出6分析对于每个柱子,找到其左右两边最高的柱子,该柱子能容纳的面积是min(max_left, max_right) - height。所以可以先扫描一遍,找到最高的柱子,将数组分为两半,然后分别进行处理。代码#include <iostream>#
2016-05-26 15:24:36 3496
原创 GEEK编程练习— —四数求和
题目输入一个特定整数s和一组整数,要求从这组整数中找到四个数a,b,c,d,使a+b+c+d=s。按照升序排列,输出所有满足条件的a,b,c,d。具体格式如下:输入01 0 -1 0 -2 2输出-2 -1 1 2-2 0 0 2-1 0 0 1分析先排序,可以用hashmap缓存两个数的和,然后左右夹逼,时间复杂度O(n^2),空间复杂度O(n^2)代码#include <iostream>
2016-05-25 08:58:15 1180
原创 GEEK编程练习— —三数求和
题目输入一个特定整数s和一组整数,要求从这组整数中找到三个数a,b,c,使a+b+c=s。按照升序排列,输出所有满足条件的a,b,c。具体格式如下:输入 0 -1 0 1 2 -1 -4输出-1 -1 2-1 0 1分析先排序,然后左右夹逼,复杂度O(n^2) 此方法可以推广到k个数求和,先排序,做k-2次循环,在最内层循环左右夹逼,时间复杂度O(max(nlogn,n^(k-1)))代码#i
2016-05-24 21:03:22 5369
原创 GEEK编程练习— —两数求和
题目输入一个特定整数值和一组整数,要求从这组整数中找到两个数,使这两数之和等于特定值。按照从前往后的顺序,输出所有满足条件的两个数的位置。具体格式如下:输入91 2 4 5 7 9 11 输出2 53 4分析1)暴力解法,复杂度O(n^2),不考虑 2)hash。用哈希表存储每个数对应下标,复杂度O(n) 3)先排序,然后左右夹逼,排序O(nlogn),夹逼O(n),最终O(nlogn)。但
2016-05-23 22:08:42 5214
原创 STL学习笔记— —算法
简介算法库定义了用来实现各种功能的函数(如查找、排序、计数、修改等),都是针对指定范围内元素的操作。需要注意的是,元素的范围以 [first, last) 的形式指定,其中 last 指的是范围内最后一个元素的下一个元素。在头文件 <algorithm>中定义。非变动性算法for_each() //对每个元素执行某个操作 count() //返回某元素的数量count_if() //返回满足特定条件
2016-05-17 15:24:08 1051
原创 GEEK编程练习— —最长连续序列
题目给定一个无序的整数数组,返回最长连续序列的长度。要求时间复杂度为O(n)。输入[100, 4, 200, 1, 3, 2, 0, -1]输出6分析因为要求时间负责度为O(n),所以不能先排序再查找。所以想到查询最快的hash表,记录每个元素是否使用,对每个元素,往左右扩张,直到不连续为止。代码#include <iostream>#include <unordered_map>#includ
2016-05-12 17:46:21 5277
原创 STL学习笔记— —迭代器
头文件所有的容器都定义了自己的迭代器类型,所以一般情况下,不需要再自己添加迭代器头文件。但是如果要使用一些特殊的迭代器,如反向迭代器,或者一些迭代器辅助函数,那么就需要添加头文件<iterator>。迭代器类型 类型 能力 提供者 输入迭代器 一次向前读取 istream 输出迭代器 向前写入 ostream,inserter 前向迭代器 向前读取和写入
2016-05-06 18:09:14 1381
原创 STL学习笔记— —特殊容器priority_queue
简介在头文件<queue> 中定义namespace std { template <typename T, typename Container = vector<T>, typename Compare = less<typename Container::value_type>> class priority_q
2016-05-04 17:41:47 5234
原创 STL学习笔记— —特殊容器queue
简介在头文件<queue> 中定义namespace std { template <typename T, typename Container = deque<T>> class queue;}queue就是数据结构里队列的实现,先进先出。定义中的第二个参数用来定义queue内部存放元素的实际容器,可以是任何序列式容器,默认容器为deque。实际上queue也只是很单纯地把各项操作转
2016-05-04 16:45:13 1599
原创 STL学习笔记— —特殊容器stack
简介在头文件<stack> 中定义namespace std { template <typename T, typename Container = deque<T>> class stack;}stack就是数据结构里堆栈的实现,后进先出。定义中的第二个参数用来定义stack内部存放元素的实际容器,可以是任何序列式容器,默认容器为deque,是因为其删除元素会自动释放内存,还有不必在
2016-05-04 16:00:29 2943
原创 GEEK编程练习— —字符替换
题目实现一个函数,把字符串中的每个空格替换成“%20”。输入There are no spaces.输出There%20are%20no%20spaces.分析这是道题挺简单的,写出来是为了强调思路,有时候正着不行就得倒着来~首先,我们经常在网址中发现%20这样的字眼,这是因为在URL参数中含有特殊字符,如空格等,可能导致服务器无法获得正确的参数,所以要把特殊符号转换为服务器可识别的字符,转换规则是
2016-05-03 21:45:20 3457
原创 GEEK编程练习— —最长相同的子串
题目输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及首字符的位置。 输入yyabcdabjcabceg输出abc3解析首先声明一下,假如字符串为aaaaaa,答案应该为aaaaa。两个个等长的子串可以有部分字符重叠。以abcab为例子分析如下: 首先寻找长度为4的子串,只能是abca和bcab,再查看这两个子串是否有其他相同的子串。有的话直接输出结果并退出程
2016-05-02 19:03:14 5221
原创 GEEK编程练习— —连续出现最多子串
题目求一个字符串中连续出现次数最多的子串如果字符串是abcbcbcabc,这个连续出现次数最多的子串是bc,连续出现次数为3次。如果类似于abcccabc,则连续出现次数最多的子串为c,次数也是3次。输入abcbcbcabc输出bc3解析
2016-05-01 14:54:41 4184
颜色迁移算法
2015-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人