算法
青阳不会被占用
stay hungry,stay foolish
展开
-
快速排序方法分而治之实现
快速排序方法分而治之实现排序方法用分而治之方法可以实现快速排序。假设一个数组Data[n],把这n个元素分成3段:left,middle,right段。middle段仅有一个元素,left段的元素都不大于中间段的元素,right段的元素都不小于middle段的元素。因此可以对left段和right段独立排序,并且排序后不用归并。middle段的元素称为划分元素。伪代码//对a[0:n-1]...原创 2019-04-13 19:13:34 · 361 阅读 · 0 评论 -
leetcode77组合问题
问题描述给定两个整数n和k,返回1,2,3…n的所有可能的k个整数的组合。输入输出输入:n=4,k=2;输出:[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4],]C++实现#include<iostream>#include<vector>#include<algorithm>using namespa...原创 2019-08-15 15:10:21 · 143 阅读 · 0 评论 -
使用递归函数生成排列
C++实现template<class T>void permutations(T list[],int k,int m){//生成list[k,m]的所有排列 if(k==m)//仅有一个排列 { copy(list,list+m+1,ostream_iterator<T>(cout,"")); cout<<...原创 2019-08-11 21:55:18 · 720 阅读 · 0 评论 -
使用stl算法next_permutation求排列
C++实现template <class T>void permutation(T list[],int k,int m){//生成list[k:m]的所有排列 do { copy(list,list+m+1,ostream_iterator<T>(cout,"")); cout<<endl; } ...原创 2019-08-11 22:02:51 · 128 阅读 · 0 评论 -
C++实现矩阵转置
1.转置原理矩阵转置:即在i行j列的元素与j行i列的元素互换2.C++实现template<typename T>void transpose(T **a,int rows){//原地完成矩阵a[0:rows-1][0:rows-1]的转置 for(int i=0;i<rows;i++) { for(int j=i+1;j<rows...原创 2019-08-11 22:19:13 · 5034 阅读 · 0 评论 -
C++实现括号匹配
1.问题描述对一个字符串的左右括号进行匹配,字符串(a*(b+c)+d)在位置0和3有左括号,在位置7和10有右括号。位置0和位置10的右括号匹配,位置3的左括号和位置7的有括号匹配。2.求解策略如果从左至右地扫描一个字符串,那么每一个右括号都与最近扫描的那个未匹配的左括号相匹配。从左到右地扫描过程中,将扫描到的左括号保存到栈中,每当扫描到一个右括号,就将它和栈顶的左括号相匹配,并将匹配的左...原创 2019-08-12 10:04:59 · 7039 阅读 · 0 评论 -
快受提取批合并字符串第三题
输入将第二个字符串每隔四个字母插入,最后剩余的部分全都插入到最尾端。输入str1 =“1 2 3 4 5 6 7 8 9”输入str2=“a b c d e”输出1 2 3 4 a 5 6 7 8 b 9 c d epython实现import mathdef mergeStr(line1,line2): line3="" length1=len(line1)...原创 2019-08-25 22:09:10 · 178 阅读 · 0 评论 -
版本是否可以升级问题快手题目
python实现软件版本是否可以升级问题import sysdef isDot(string): str1=str(string) if str1.count(".")!=0: return True else: return Falsedef isUpgrade(origin,new): if origin==new: ...原创 2019-08-25 22:11:57 · 167 阅读 · 0 评论 -
leetcode1两数之和
描述:给定一个整数数组和一个值target,求两个下标i、j,使得a[i] + a[j] = target,返回下标。解法一:哈希表可以用哈希表unordered_map不断记录每个元素对应的下标,然后查找target - a[i]就行了,查到了就有,查不到就没有。时间空间复杂度都是O(N)。#include <unordered_map>using std::unordere...原创 2019-08-13 10:59:34 · 160 阅读 · 0 评论 -
C++实现排列组合问题
排列组合问题是高中数学知识,但是在现实中非常需要;对于计算机编程领域来说更是数不胜数。一、排列问题排列(英语:Permutation)是将相异对象或符号根据确定的顺序重排,每个顺序都称作一个排列。1.1排列数的计数此节使用排列的传统定义。从 n个相异元素中取出 {\displaystyle k} k个元素, k个元素的排列数量为:1.2重复排列问题从n个元素中取出k个元素,k个元素可...原创 2019-08-11 17:42:34 · 12817 阅读 · 1 评论 -
C++实现常用查找算法
在日常编程和面试中,查找算法和排序算法需要非常熟练。本文用C++语言的语法来写常用的查找算法:顺序查找,二分查找,一、顺序查找1.1基本思想(有序无序皆可以)1 从表中的第一个元素开始,依次与关键字比较。2 若某个元素匹配关键字,则查找成功。3 若查找到最后一个元素还未匹配关键字,则查找失败。1.2 时空复杂度1.查找成功时的平均查找长度为:(假设每个数据元素的概率相等)ASL =...原创 2019-08-11 13:20:53 · 5705 阅读 · 0 评论 -
返回探针到原子k的距离内的原子索引列表
返回探针到原子k的距离内的原子索引列表std::vector<int> findNeighborIndices(atomList,int &probe,int &k){ std::vetcor<int> neighborIndices; double radius=atomList[k].radius+probe+probe; std::vecto...原创 2019-05-07 22:11:43 · 114 阅读 · 0 评论 -
决策树算法
决策树的伪代码如下(分而治之算法):输入:训练集D={(x1,y1),(x2,y2),.....,(xm,ym)};属性集A={a1,a2,.....ad}.过程:函数treeGenerate(D,A)1.生成节点Node;2.if D中样本全属于同一类别C then3. 将node标记为C类叶结点;return4. end if5. if A≠∅ OR D中样本在A上取值相同...原创 2019-05-25 22:10:57 · 393 阅读 · 0 评论 -
denauly算法
input: 顶点列表(vertices) //vertices为外部生成的随机或乱序顶点列表output:已确定的三角形列表(triangles) 初始化顶点列表 创建索引列表(indices = new Array(vertices.length))//indices数组中的值为0,1,2,3,......,vertices.length-1...原创 2019-07-23 09:01:11 · 241 阅读 · 0 评论 -
leetcode3无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度。测试输入:’“abcabcbb”’,没有重复字符的最长字符串是‘“abc”’,那么长度就是3。输出:3#include <vector>#include <string>#include <iostream>#include <map>using namespace std;int...原创 2019-08-13 15:26:32 · 168 阅读 · 0 评论 -
leetcode4最长回文子串
题目描述:给定一个字符串s,找到s中的最长的回文字符串。测试输入:“babad”输出:“bab”//最长回文字符串string findPlindrome(string s,int left,int right){ int n=s.size(); int l=left; int r=right; while (left>=0&&ri...原创 2019-08-13 15:43:39 · 108 阅读 · 0 评论 -
leetcode5反转整数
题目描述:给定一个32位有符号整数,将整数中的数字进行反转示例1:输入123,输出:321示例2:输入120, 输出:21#define INT_MAX 214748647#define INT_MIN (-INT_MAX-1)int reverse(int x){ int y=0; int n; while(x!=0) { n=x%10; if(y>INT_MA...原创 2019-08-13 15:54:23 · 102 阅读 · 0 评论 -
C++实现经典排序算法
经典的排序算法是面试必备,数量掌握尤其重要。下面笔者将从算法思想、算法时间空间复杂度、算法实现、动图进行逐个展开,最后以表格总结一、冒泡排序1.1 基本思想(1) 比较相邻的元素。如果第一个比第二个大,就交换;(冒泡策略)(2) 对每一对相邻元素作(1)的步骤,从开始第一对到结尾的最后一对,这样在最右端元素就会是最大的数;(3) 针对所有的元素重复以上的步骤,除了最后一个;(4) 重复...原创 2019-08-10 22:45:00 · 286 阅读 · 0 评论 -
判断是否是幸运数
1.幸运数的定义:十进制的数字的各个位加和与二进制的数字各个位上的加和相等则为二进制数,否则不是二进制数,输出0-n的幸运数的个数。2.C++实现:#include <iostream>using namespace std;int tenSummary(int x){ int sum=0; while (x>=1) { int...原创 2019-08-23 20:46:23 · 1677 阅读 · 1 评论 -
leetcode2两数相加
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2019-08-13 11:19:16 · 141 阅读 · 0 评论