数据结构与算法
自动小哥
这个作者很懒,什么都没留下…
展开
-
从二进制位到提取每个二进制位到C++中bitset使用
从二进制位到提取每个二进制位到C++中bitset使用移位运算分为逻辑移位和算术移位。逻辑移位:移出去的位就丢弃,空缺位用0填充;算术移位:移出去的位丢弃,空缺位用“符号位来填充”,一般用在右移运算中。对于有符号整数和无符号整数左移和右移运算是不同的。(1)对于无符号整数,左移和右移运算都是逻辑移位。(2)对于有符号整数,比如int类型:左移是逻辑移位;右移是算术移位,即:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),正数,高位的空位补0。负数,高位的空位补1.。对有符号整型和原创 2020-07-02 22:24:39 · 2079 阅读 · 0 评论 -
比较扑克牌大小
比较扑克牌大小题目描述扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。基本规则:(1)输入每转载 2020-07-02 10:28:01 · 3909 阅读 · 0 评论 -
24运算点问题
牛客网华为机考:24运算点问题:看到一个逻辑很清楚的题解:计算24点是一种扑克牌益智游戏,随机抽出4张扑克牌,通过加(+),减(-),乘(*), 除(/)四种运算法则计算得到整数24,本问题中,扑克牌通过如下字符或者字符串表示,其中,小写joker表示小王,大写JOKER表示大王: 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER本程序要求实现:输入4张牌,输出一个算式,算式的结果为24点。详细说明:1.运算只考虑加减乘除运算,没有阶乘等转载 2020-07-02 09:56:06 · 336 阅读 · 0 评论 -
牛顿迭代法求N次方根
牛顿迭代法求N次方根这里以立方根为例:f(x) = x^3 - y, 求解f(x) = 0时的解;牛顿迭代思想x(n+1)= x(n)-f(n)/f '(n),那么 x=x-(x^3-y)/(3* x^2)=(2*x+y/x/x)/3;代码:#include<iostream>#include<algorithm>using namespace std;double cubert(const double y){ double x; for(x=原创 2020-06-22 10:02:09 · 1595 阅读 · 0 评论 -
辗转相除法求取两个数的最大公约数,同时求取最小公倍数
辗转相除法求取两个数的最大公约数,同时求取最小公倍数定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD。gcd(a,b) = gcd(b,a%b) (a>b且a mod b 不为零)int gcd(int a,int b){ if(a<b) { int temp = a; a = b; b = temp; } if(a%b == 0) return b; else原创 2020-06-22 08:57:22 · 239 阅读 · 0 评论 -
三种背包问题总结
三种背包问题总结1. 01背包问题问题:假设有n件物品且有相应的价值v,与重量w,有一个容量为m的背包,每件物品只可以使用一次,求怎么装这些物品,可以使背包中的价值最高二维:dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i] + v[i])转换到一维,为保证每件物品只使用一次,注意看j的变化为从后向前:for(int i=1;i<=n;++i) for(int j=m;j>=w[i];--j) dp[j] = max(dp[j],dp[j-w[i]原创 2020-06-19 17:18:38 · 304 阅读 · 0 评论 -
各种排序算法
各种排序算法(1)冒泡排序算法复杂度O(n^2)void BubbleSort(vector<int>& vec){ int n = vec.size(); for(int i=0;i<n;++i) { for(int j=n-1;j>=i;--j) { if(vec[j-1] > vec[j]) swap(vec[j-1],vec[j]); } } return;}冒泡算法的优化:防止数据在已经有序的前提下还进行不必原创 2020-06-10 00:52:32 · 136 阅读 · 0 评论 -
数据结构复习:弗洛伊德算法(Floyd)
数据结构复习:弗洛伊德算法(Floyd)弗洛伊德算:算法的复杂度为O(n^3)它的思想是以经过一个点到达终点的为最短来更新路径权值矩阵,以及路径前驱矩阵代码来自大话数据结构:/* Floyd 算法, 求网图 G 中各顶点 v 到其余顶点 w 的最短路径 P[v][w] 及带权长度 D[v][w] */void ShortestPath_Floyd(MGraph G, Patharc *P, ShortPathTable *D) { /* 初始化 D 与 P */ for (int原创 2020-06-06 16:17:48 · 391 阅读 · 0 评论 -
数据结构复习:迪杰斯特拉算法
数据结构复习:迪杰斯特拉算法迪杰斯特拉算法算法步骤1.初始化邻接矩阵2.初始化起点到各个顶点的路径3.初始化路径前驱数组4.选取目前起点到所有点的最短的一个,确定为最短路径,并且在此之前到该顶点的最短路径还没有确定下来5.将刚刚确定的点确定为最短路径6,更新:以刚才确定的点为基础,看经过该点的下一个点的路径,是不是比原来的短,若是,则更新最短路径数组,和前驱路径数组7.不断重复4-6步,直至找到到终点的最短路径;代码:#define MAXVEX 9#define INFINITY原创 2020-06-06 15:28:37 · 215 阅读 · 0 评论