![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
算法与数据结构刷题
长安挨踢民工
这个作者很懒,什么都没留下…
展开
-
13-调整数组顺序使奇数位于偶数前
C++实现:class Solution {public: void reOrderArray(vector<int> &array) { //思路:创建一个新的数组,遍历两次原数组,将原数组中的奇数先push进去,再将偶数push进去,最后用新数组数据覆盖原数组 vector<int> res;//新数组 ...原创 2020-04-06 15:20:35 · 73 阅读 · 0 评论 -
11-二进制中1的个数
C++实现:将n的每位与1进行按位与操作class Solution {public: int NumberOf1(int n) { //通过1和该二进制数的每一位进行与操作来判断 if(n==0) return 0; int count = 0; int...原创 2020-04-05 23:57:57 · 99 阅读 · 0 评论 -
55-链表中环的入口节点
非常详细的方法介绍:博客链接https://cuijiahua.com/blog/2018/01/basis_55.htmlC++:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class...原创 2020-05-06 12:48:52 · 113 阅读 · 0 评论 -
33-丑数
学习别人的博客:https://cuijiahua.com/blog/2018/01/basis_33.htmlC++代码:class Solution {public: int GetUglyNumber_Solution(int index) { if(index < 7){ return index; } ...原创 2020-04-16 10:52:21 · 78 阅读 · 0 评论 -
35-数组中的逆序对
知识点:归并排序(对这个算法自己还不掌握)C++实现:class Solution {public: long cnt = 0; //合并子数组并一边统计逆序对数目 void merge(vector<int> &data,int start,int mid,int end){ vector<int> tmp;//...原创 2020-04-21 15:13:28 · 282 阅读 · 0 评论 -
37-数字在排序数组中出现的次数
方法1:暴力法,直接遍历数组,统计数字k在数组data中出现的次数C++实现:class Solution {public: int GetNumberOfK(vector<int> data ,int k) { //暴力法,直接顺序遍历数组,统计k在数组data中出现的次数 int times = 0; for(in...原创 2020-04-22 14:27:01 · 127 阅读 · 0 评论 -
28-数组中出现次数超过一半的数字
思路:https://www.bilibili.com/video/BV187411W7A9?from=search&seid=6211879220294896728在上述视频中博主介绍了四种方法,这里实现的是第四种。方法:遍历数组中的元素,遍历规则:初始化第一个元素为出现次数最多的数字result,并初始化出现次数times为1。当我们遍历到下一个数字的时候,如果下一个数字num...原创 2020-04-13 00:43:41 · 97 阅读 · 0 评论 -
10-矩形覆盖
C++实现:class Solution {public: int rectCover(int n) {//直接套用推导的数学公式 if(n<=3){ return n; }else{ return rectCover(n-1)+rectCover(n-2); } }...原创 2020-04-04 11:39:54 · 86 阅读 · 0 评论 -
06-旋转数组的最小数字
方法1:直接遍历数组元素,比较大小C++实现:class Solution {public: int minNumberInRotateArray(vector<int> rotateArray) {//输入的数组是原数组的旋转数组,原数组是个非递减排序的数组 //遍历数组元素,逐个比较大小,最后找到最小值 int len = rot...原创 2020-04-03 18:24:14 · 65 阅读 · 0 评论 -
25-复杂链表的复制
思路:https://www.bilibili.com/video/BV1j7411a7Lm?from=search&seid=1630278310967222954,在该视频中博主讲解了两种方法,思路讲解的非常清楚,这里只是学习了第2种优质代码学习自:https://cuijiahua.com/blog/2017/12/basis_25.htmlC++实现:/*struc...原创 2020-04-10 15:39:43 · 489 阅读 · 0 评论 -
64-滑动窗口的最大值
数组、一 题目给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,原创 2020-05-22 23:00:15 · 124 阅读 · 0 评论 -
44-翻转单词序列
C++:先整体翻转,再逐个翻转每个单词#include<iostream>#include<algorithm>using namespace std;int main() { string str = "student. a am I"; int length = str.size(); cout << "length=" <&l...原创 2020-04-23 12:58:40 · 209 阅读 · 0 评论 -
45-扑克牌顺子
给出一个数组numbers,判断是否可以组成顺子其中0可以代替任何数,如[0,0,1,3,5],有2个0,可以分别代替2和4组成[1,2,3,4,5]的顺子。判断的方法就是看数组中有几个0,能否代替所需的数字组成顺子,而且当数组元素小于5,数组元素有重复时一定不是顺子。C++代码:class Solution {public: bool IsContinuous( vector...原创 2020-04-23 22:50:58 · 144 阅读 · 0 评论 -
54-字符流中第一个不重复的字符
创建一个哈希表,每次往字符串里面添加一个字符的时候 ,并用哈希表统计该字符出现的次数,最后遍历哈希表,找到出现次数为1的字符。C++:class Solution{private: string s; map<char, int> map;public: //Insert one char from stringstream void Ins...原创 2020-05-01 23:40:07 · 105 阅读 · 0 评论 -
21-栈的压入弹出序列
解法:借用一个辅助的栈,遍历压栈序列,先将压栈序列中的第一个值放入辅助栈中,这里是1,然后判断辅助栈的栈顶元素是不是出栈序列中的第一个元素,这里是4,很显然1≠4,所以我们继续压栈。直到判断相等以后辅助栈开始出栈,出栈一个元素并将出栈列序中的值向后移动一位,直到不相等才停止出栈。等压栈序列遍历完成后,如果辅助栈还不为空,说明弹出序列不是该入栈序列的弹出顺序。【这里自己对序列4,5,3,2,1是...原创 2020-04-09 18:19:32 · 113 阅读 · 0 评论 -
30-连续子数组的最大和
同LeetCode53题,采用贪心算法的分析过程图解:https://leetcode-cn.com/problems/maximum-subarray/solution/zui-da-zi-xu-he-cshi-xian-si-chong-jie-fa-bao-li-f/C++实现:class Solution {public: int FindGreatestSumOfSu...原创 2020-04-13 17:47:34 · 142 阅读 · 0 评论 -
56-删除链表中重复的节点
过程:C++:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListN...原创 2020-05-06 17:52:25 · 129 阅读 · 0 评论 -
48——不用加减乘除做加法
位运算C++:class Solution {public: int Add(int num1, int num2) {//位运算,以5+7 =12为例,0101+0111 -》不考虑进位的和 + 只考虑进位的和,进行递归, /* int sum1 = (num1 ^ num2);//计算num1与num2的二进制不考虑进位的和 ...原创 2020-04-24 13:58:35 · 111 阅读 · 0 评论 -
52-正则表达式匹配
b站视频讲解 :https://www.bilibili.com/video/BV1Sa4y1t7RS?from=search&seid=16601585585223517302C++:class Solution {public: bool match(char* str, char* pattern) {//指针指向字符串的第一个字符,字符串的最后一个字符为...原创 2020-04-30 18:15:11 · 151 阅读 · 0 评论 -
08-跳台阶
分析:假如 n = 1,即一共只有一级台阶,显然一共就只有一种跳法;假如 n = 2,一共有两级台阶,那么可以每次跳一级跳两次,或者也可以一次跳两级,也就是说一共有两种跳法;n 越大跳法就越多,但是我们可以发现一个规律:先令 f(n) 为 n 级台阶的总跳法数,那么第一次如果选择跳一级的话,那么剩下的 n-1 级台阶的跳法数就为 f(n-1),如果第一次跳两级的话,那么剩下的 n-...原创 2020-04-04 09:58:20 · 107 阅读 · 0 评论 -
31-整数中1出现的次数
C++实现:class Solution {public: int NumberOf1Between1AndN_Solution(int n) {//暴力法,即判断数字的每一位是否是1,若是,次数加1 int counter = 0;//计数器 for(int i=1; i<=n; i++){//遍历1-n之间的数 ...原创 2020-04-13 21:58:39 · 107 阅读 · 0 评论 -
09-变态跳台阶
推导出的数学公式:F(n) = 2F(n-1)C++实现:class Solution {public: int jumpFloorII(int n) { //套用推导出的数学公式 int fn = 0;//初始化返回值 if(n<2){ return n; }else{ ...原创 2020-04-04 10:32:00 · 62 阅读 · 0 评论 -
20-包含min函数的栈
C++实现:class Solution {public: stack<int> s; void push(int value) { s.push(value); } void pop() { //空栈 if(s.size() == 0){ return; }...原创 2020-04-08 19:25:45 · 93 阅读 · 0 评论 -
29-最小的k个数
思路:用简单粗暴的方法,先对数组进行排序,载遍历数组输出最小的K个数。此外有很多高级算法,这里没有学习。C++实现:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { //简单粗暴的方法,先排序,再遍历输出最小的k...原创 2020-04-13 09:34:36 · 62 阅读 · 0 评论 -
53-表示数值的字符串
一、题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。二、题解分情况讨论,返回true的情况不易列举,但符合以下6种情况必返回falseclass Solution2 {public: bool isNumeric(char* str) { cout << "str.原创 2020-10-11 11:19:40 · 112 阅读 · 0 评论 -
01-二维数组中的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路学习的该博客的方法:https://blog.csdn.net/alidada_blog/article/details/82494856C++实现:class Solutio...原创 2020-03-28 10:50:59 · 102 阅读 · 0 评论 -
14-链表中倒数第k个节点
思路1:先定义两个指针p和q。让p和q刚开始都指向头结点。再定义一个i,i的初始值为0。然后遍历链表,直到p走到链表结尾,即p为NULL,每次i++。当i < k 的时候我们让p走,q不走。当i >= k 的时候我们让p和q同时走一步。当p走到结尾的时候,那么此时q所指的节点就是倒数k第k个节点,我们返回就好了。————————————————原文链接:https://blog.c...原创 2020-04-07 10:10:41 · 84 阅读 · 0 评论 -
46-圆圈中最后剩下的数
学习自别人的递推过程:https://cuijiahua.com/blog/2018/01/basis_46.htmlC++代码:class Solution {public: int LastRemaining_Solution(int n, int m) { if(n<1 || m<1) return -1; //递推公式...原创 2020-04-24 08:24:29 · 99 阅读 · 0 评论 -
07-斐波那契数列
C++实现:class Solution {public: int Fibonacci(int n) {//需要注意,在本例中给出了第0项为0,因此从第2项开始的值为前两项的和 if(n<=1){ return n; } //处理从第2项开始的值 int pre = 0; ...原创 2020-04-03 22:08:59 · 132 阅读 · 0 评论 -
50-数组中重复的数字
C++:使用哈希表,两次遍历,第一次统计每个数字出现的次数,第二次查找重复的数字,并将第一个重复的数字赋值给duplicationp[0]class Solution {public: // Parameters: // numbers: an array of integers // length: the lengt...原创 2020-04-26 00:39:50 · 215 阅读 · 0 评论 -
16-合并两个排序的链表
比较过程:https://blog.csdn.net/nhgfd/article/details/60867925C++实现:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ...原创 2020-04-07 15:12:12 · 75 阅读 · 0 评论 -
43-左旋转字符串
C++代码:class Solution {public: //实现子字符串的逆序 void InverseString(string &str, int begin, int end){//形参接收字符串&str while(begin < end){ swap(str[begin++],str[end--])...原创 2020-04-23 09:16:56 · 235 阅读 · 0 评论 -
12-数值的整数次方
C++实现:思路,求base的exponent,即将exponent连乘base次class Solution {public: double Power(double base, int exponent) { //任何数的0次方为1 if (exponent == 0){ return 1; } ...原创 2020-04-06 00:41:36 · 71 阅读 · 0 评论 -
05-用两个栈实现队列
知识点:栈、队列一、题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。二、代码:C++:class Solution{public: void push(int node) {//入队时需要保证stack2为空 while(!stack2.empty()){//如果stack2中有元素,先压入栈stack1,并清空stack2 stack1.push(stack2.top());原创 2020-05-08 21:40:38 · 108 阅读 · 0 评论 -
47——求1+2+3+4+...+n
递推c++:class Solution {public: int Sum_Solution(int n) { //递推:f[n] = n + f[n-1], f[1] = 1 int result = n; result && (result += Sum_Solution(n-1));//递归结束条件:resu...原创 2020-04-24 09:10:37 · 687 阅读 · 0 评论 -
15-反转链表
思路:https://www.bilibili.com/video/BV1R7411E7Cy?from=search&seid=193959564893214626C++实现:class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL){ ...原创 2020-04-07 12:30:56 · 106 阅读 · 0 评论 -
32-把数组排成最小的数
主要是约定了一种排序规则。C++实现:class Solution {public: static bool cmp(int a,int b){ string AB = to_string(a) + to_string(b);//字符串拼接 string BA = to_string(b) + to_string(a); retu...原创 2020-04-14 21:53:18 · 172 阅读 · 0 评论 -
40-数组中只出现一次的数字
数组+哈希表C++代码:class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { //使用哈希表,两次遍历数组。第一次统计每个数字出现的次数,第二次找出出现次数为1的数字 unordered_map<int,in...原创 2020-04-22 16:38:17 · 98 阅读 · 0 评论 -
03-从尾到头打印链表
C++实现1:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vec...原创 2020-04-02 10:27:27 · 74 阅读 · 0 评论 -
41-和为S的连续正数序列
已知的数学知识:对于连续正数序列,已知首项和尾项,则连续正数序列的求和公式为:(首项+尾项)*序列长度/2思路:定义两个指针实现滑动窗口学习博客:https://cuijiahua.com/blog/2018/01/basis_41.htmlC++代码:class Solution {public: vector<vector<int> > Fi...原创 2020-04-22 21:25:53 · 114 阅读 · 0 评论