![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
记录分享自己刷题的思路
刘根生
蔡文姬没有文
展开
-
指针递归调调用实现循环移位
指针、递归实现循环以为,以后的循环卷积c代码的实现,或许可以用得上,关键的是现在用C语言实现卷积都实现不了。愁啊,四天后必须解决这个问题。#include<iostream>using namespace std;int main(){ void move(int*,int,int); int number[20],n,m,i; cout<<"how ma...原创 2018-10-24 19:57:55 · 1048 阅读 · 0 评论 -
c语言实现积分运算
用指针实现,最好先明白*p[4]和(*p)[4]的区别int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。int *p[n]; 中,运算符[ ...原创 2018-10-24 21:24:44 · 24063 阅读 · 8 评论 -
C语言实现卷积代码
C语言实现一维卷积代码(失败)待修改#include<iostream>using namespace std;int main(){ int i,j,k,n,m,a[n],b[m],c[n+m-1]; cout<<"输入n:"; cin>>n; cout<<endl; cout<<"输入m:"; cin&原创 2018-10-25 16:54:09 · 4837 阅读 · 0 评论 -
C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
今日正式用csdn博客记录,回顾我所学到的知识,分享一些我的人生感悟和自身经历。也希望未来通够过此平台和更多喜爱编程的人交流学习。道听途说再加上自己的感悟,认为编程最重要的是思想,而不是语言本身,语言只是个工具。所以我们得先学思想。遇到问题,应该先想如果是自己去做会怎么处理,但我们不能一步到位,因为计算机并不会做一步到位,他最擅长的是迭代,所以我们要问题分解许多基本的步骤,然后一步一步去执行,...原创 2018-10-21 21:11:40 · 15751 阅读 · 5 评论 -
二分法详解
何谓折半查找,举个例子很快就可以明白,给你了9个数 1 2 3 4 5 6 7 8 9 让你去找2在哪里,这时候你肯定会说这太简单了,但是计算机就没那么强了,它得拿着2和这9个数一个一个的比较,2在前面还好比较的次数比较小,但是如果让你找6在哪呢,需要比较的次数就多了,可能你觉得多这一次两次没什么差别,但是如果1到10000个数让你找呢,这时候折半查找的优势就显现出来了。我们先看2在不在1-5里面...原创 2018-10-24 11:20:38 · 7873 阅读 · 1 评论 -
C语言指针实现计算平均分等功能
4个学生5门课数据自己输入,输出第一门的平均分,并找出有两门以上课程不及格的学生和平均成绩在90分以上的或全部课程成绩在85分以上的学生。程序不难,容易理解,但关键是思路要清楚。里面涉及大量的指针的定义使用,多敲点这样过百行的程序为以后大程序打基础。代码如下:#include<iostream>using namespace std;int main(){ void av...原创 2018-10-27 22:08:51 · 2528 阅读 · 0 评论 -
c++小项目练习之复数计算器
准备了一个月的考试终于结束了。总结一下这一个月学到的理论知识,规划一下1月的计划。昨天敲了一天的代码。复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作。纯代码后面再做详细的介绍。#include<iostream>#include<cmath>#include<cstdlib>#include<cstring&g...原创 2018-12-31 10:20:56 · 653 阅读 · 0 评论 -
c++编程练习之删除序列中相同的数
#include<iostream>using namespace std;class arr{ int m; int a[100]; public: arr(int x[],int size) { m=size; for(int i=0;i<m;i++) a[i]=x[i]; } void delsame(); void...原创 2018-11-25 20:10:32 · 1095 阅读 · 0 评论 -
今日c++练手之寻找n个连续的合数
算法的关键在于如何寻找连续的合数重点在连续,所以需要有标志位。只有连续的n个数都是合数才可以退出这个循环。并且找的这个数组每检测n个数都要重新开始计算。具体代码如下#include<iostream>using namespace std;class noprime{ int n; int *p; public: noprime(int n1) { n=...原创 2019-03-19 10:54:22 · 1786 阅读 · 1 评论 -
C++之今日练手二维数组循环移位
#include<iostream>using namespace std;#define M 3#define N 4class tdarray{ int a[M][N]; public: tdarray(int x[M][N]) {int i,j; for(i=0;i<M;i++) for(j=0;j<N;j++) a[i][j...原创 2019-03-18 09:36:42 · 1038 阅读 · 0 评论 -
今日C++练手之求指定范围内的素数
#include<iostream>using namespace std;class primenum{ int data[25]; int span1,span2; int num; public: primenum(int n1,int n2) { num=0; span1=n1; span2=n2; } int isprime(...原创 2019-03-14 21:21:12 · 662 阅读 · 0 评论 -
C++leetcode找出两个有序数组的中位数(2)
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。如果不考虑复杂度的话这个题目很简单:将两个数组合并为一个数组,然后用冒泡排序算法将合并后的数组进行排序,然后用二分法找出中间的数,但是这个复杂度远远超过O(log(m + n)),因为光冒泡排序就是O(n^2)。今天在leetcode上...原创 2019-10-16 03:36:44 · 179 阅读 · 0 评论 -
算法练习之leetcode两数相加(1)
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0...原创 2019-10-15 03:11:58 · 162 阅读 · 0 评论 -
求指定范围内的所有素数C++代码实现
题目简单,直接上代码#include<iostream>using namespace std;class primenum{ int data[25]; int span1,span2; int num; public: primenum(int n1,int n2) { num=0; span1=n1;span2=n2; } int ...原创 2020-01-06 15:52:49 · 963 阅读 · 0 评论 -
在家闲来无事不如编个21点游戏玩玩
#include<cstdlib>#include<iostream>#include<ctime>using namespace std;class ccard{ private: int napip[5]; int nnumber; int ndollar; int ngamble; int nwin; int nlos...原创 2020-02-04 17:23:06 · 219 阅读 · 0 评论 -
leetcode4两数相加
题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。方法一:根据定义,合并、排序以后取中位数(时间复杂度不符合要求)这应该是最简单直接的做法,即根据定义来做。考虑如下两种情况:情况 1:如果合并以后的数组的长度是偶数,中位数有 2 个,此时取它们的平均值;情况 ...转载 2019-12-03 17:06:34 · 106 阅读 · 0 评论 -
超长数列中n个整数排序C++代码实现
题目要求:给出一个数组,要求对其中指定的几个数进行排序思路:利用冒泡排序对指定的几个数进行排序即可#include<iostream>using namespace std;class LIST{ int size; int *arr; public: LIST(int a[],int len) { size=len; arr=new int[...原创 2020-01-06 15:36:03 · 283 阅读 · 0 评论 -
分数运算C++代码实现
求两个分数的和:思路:首先两个分数的分母相乘,各自的分子分别乘以对方的分母,然后再利用辗转相除算法去求分子和分母的最大公约数。需要注意的一点是在利用类进行定义求和函数的时候要把参数sum和add也定义为类,因为sum和add包含分子和分母,是一个整体,当然你也可以不去定义但是程序写起来比较冗余,体验不到c++类的优势。代码如下:#include<iostream>using n...原创 2020-01-05 16:58:07 · 1678 阅读 · 1 评论 -
找出指定范围的回文数C++代码实现
思路非常的简单,即把这些书一位一位的分开用一个数组存上,看看一共多少位,然后从后向前看看是否相等即可。#include<iostream>using namespace std;class pal{ int low,up; int a[100]; int count; public: pal(int t1,int t2); int ispalin(int ...原创 2020-01-27 19:44:17 · 1041 阅读 · 0 评论 -
在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
最近跟着国外的导师做语音情感识别,开始踏上了学习python之路,之前一直不愿意接触python,感觉c++更牛一点,C++会了之后python很简单的就学会了,上手后两种感觉:1 真香 2不像想象的那么简单。忙完老师布置的任务之后,又要立一波flag了,每天都在leetcode练练手,不知道能坚持三天吗,不管了,flag还是要立的。def twoSum(nums, target):...原创 2019-11-19 19:17:04 · 770 阅读 · 0 评论 -
求两个数集的并集C++代码实现
算法思路:求集合a和集合b的并集,我们可以在设置一个临时的集合C,先把集合a的数放入集合C,然后建立一个查找函数,查找集合b的数是否在集合C,如果不在集合C则选择添加到集合C;如果在集合C,不执行任何操作。代码如下#include<iostream>using namespace std;class SET{ int a[40],b[40],c[40]; int num...原创 2020-01-05 15:26:26 · 4820 阅读 · 0 评论 -
统计字符串中的英文字母的个数C++代码实现
运行后可能出现警告,但是不影响结果,出现警告的原因是 s存放在constan区域,但在程序的声明中却用指针进行声明的。#include<iostream>#include<cstring>using namespace std;class wordnum{ char str[80]; int c; public: wordnum(char *s)...原创 2020-01-06 16:24:48 · 3168 阅读 · 0 评论 -
两数之和C++代码实现超详细讲解
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位数字。例子输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807解题思路:两个数相加需要考虑到进位,涉及的知识点有结构体指针的运用和单...原创 2020-02-04 21:25:29 · 1561 阅读 · 0 评论 -
双向链表实现电话簿C++代码实现
双向链表实现电话簿主要涉及的知识点就是双向链表的创建,插入,删除操作,涉及到一小点的文件操作。双向链表的插入和删除操作根据删除头结点尾结点中间结点代码不同,其中头结点和尾结点稍许的麻烦因为插入删除都涉及到头指针和尾指针的重新赋值和连接。删除中间结点较为简单,设置一个临时结点指向要删除结点的前向指针前后连接即可。文件操作主要涉及文件的读取操作相对来说比较简单。最难理解的可能就是双向链表的操作。这一部...原创 2020-01-31 04:17:19 · 512 阅读 · 0 评论 -
一道题教会你回溯、动态规划、贪心
这是leetcode上的一道题。拿到这道题最容易想到是回溯算法,即递归从第一个元素开始跳,跳到某个元素之后在当前的位置上继续跳,如果不满足条件就回溯,之前一直不知道回溯的过程,今天可算是弄明白了。简单来说回溯就是按照一条路径走,当发现这条路径走不通后回到一开始走的地方看看还有没有其他路径可以选择。回溯有很多种应用,比如二叉树的遍历。在一开始学习递归的时候自己一遇到这样形式的就不知道程序运行的过...原创 2020-03-23 00:55:19 · 186 阅读 · 0 评论 -
求最长回文子串
利用中心扩展法求最长回文子串算法复杂度为O()待改进:Manacher方法,Manacher 法将所有的字符串全部变成奇数个字符。思想:回文子串一定是个中心对称的图形,有的对称中心是一个字母比如abcba,有的是对称中心是两个字母比如abba。所以需要分开进行(程序中会有体现)。利用回文子串的这一特点我们可以假设回文子串的每一个子串都是对称中心,然后看看对称中心的左右是否是一样的,如果是一...原创 2020-02-05 20:50:13 · 96 阅读 · 0 评论 -
单向链表操作之删除倒数第n个结点
关键在于倒数第n个结点,如果让删除第几个结点还是很简单的。所以可以想办法将倒数第几个结点转换成正数的第几个结点,但是题目中并没有给出一共多少个数,所以不太好转化,我们可以利用双指针来操作。利用头指针和尾指针操作,先让尾指针移动到第n个结点处,然后再把头指针和此时的尾指针一块移到最后。这样,尾指针就统计了链表的长度。尾指针一共走了两端,第一端走了n个路程,第二段一共走了总数-n个路程,而此时头结点是...原创 2020-02-11 21:00:29 · 772 阅读 · 0 评论 -
栈的应用(c++)
如果只了解栈的特点我们可能不知道栈的作用,在大学备考计算机二级C语言的时候,学习过栈和队列,当时只知道栈的特点是后进先出,队列的特点是先进先出。编程过程中并没有用过栈和队列,没有体会到算法的巧妙。上了研究生为了找工作开始刷leetcode的题目才体会到算法的巧妙。今天是在俄罗斯的第五个半月,也是我开始刷leetcode的第二遍,这一遍我决定记录我自己的刷题经验,以便后来复习,如果能帮助到大家,那更...原创 2020-03-16 04:11:42 · 402 阅读 · 0 评论 -
三数之和
题目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]整体思路利用C++#include<algorith...原创 2020-02-10 19:08:45 · 193 阅读 · 0 评论 -
动态规划是真的难啊坚持
动态规划的思路,和官方题解的思路是一样的。在这里我说说我的思考过程。一开始我没有直接想到dp数组里的每个元素,代表“以该元素结尾的最长有效长度”,而是我把它定义成“到该元素为止前面字符串里最长有效长度”。比如说:( ( ) ( ( ( ( ) )index 0 1 2 3 4 5 6 7 8dp arr 0 0 2 2 2 2 2 2 ...转载 2020-02-13 20:14:00 · 968 阅读 · 0 评论 -
整数转罗马数字C++代码实现
题目:罗马数字包含以下七种字符:I,V,X,L,C,D和M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大...原创 2020-02-09 02:53:56 · 1593 阅读 · 1 评论 -
正则表达式匹配C++代码实现
正则表达式匹配的解决需要用到递归和动态规划的知识。递归和动态规划之间是有密切的联系的。动态规划的实质就是带有缓存区的递归。递归实现阶乘。#include <iostream>using namespace std; //计算阶乘的函数long CalcJiecheng(int num){ int res = 0; if (1== ...原创 2020-02-08 18:11:44 · 1139 阅读 · 0 评论 -
短板效应C++代码实现
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/container-with-mos...原创 2020-02-08 20:49:35 · 252 阅读 · 0 评论 -
LRU缓存机制
LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。这里用c++来实现。知识铺垫:c++迭代器(1)正向迭代器形式:容器类名::iterator 迭代器名(2)常量正向迭代器:容器类名::const_iterat...原创 2020-04-15 16:30:35 · 147 阅读 · 0 评论 -
回溯算法超详细讲解(附代码)
因为自己在学习回溯算法的时候一直不清楚回溯的具体过程, 可能是因为自己太笨,这个问题困扰了我好几天。回溯还是挺有用的,树的遍历,全排列问题都可以用回溯算法解。面试的时候好像也比较侧重回溯算法和动态规划。回溯形象解释下:假设你要从你家去你女朋友家,没有导航,但是她告诉你了,从你家到她家要只需经过两个十字路口就可以,这个时候怎么办呢,只能是从第一个十字路口选择一个方向(A)然后一直走遇到第二个十字...原创 2020-03-25 03:23:15 · 4702 阅读 · 0 评论 -
除法求值bfs实现c++代码
pair 的用法std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。pair被定义为struct,因此可直接存取pair中的个别...原创 2020-04-12 14:14:32 · 197 阅读 · 0 评论 -
双指针解决数组排序问题
这个问题如果注意,用一句就可以解决sort(nums.begin(),nums.end());完事。但是人家明确说了,不能用代码库中的排序函数。我们就得自己去实现排序。其实这个问题很简单,因为里面只有三种颜色,用0 1 2 表示。思想也很简单,就是我们用双指针遍历数组。如果遇到0放在前面,遇到1就在那个位置,遇到2跳到最后。代码如下,个人感觉用双指针来解决数组的排序问题特别好使。...原创 2020-03-23 16:03:08 · 758 阅读 · 0 评论 -
记载下这个题中的语法(对这些语法的使用不熟悉)
这个题的解法按照身高h降序和k升序对数组中的元素进行排列,然后插入的时候按照索引进行插入class Solution {public: vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { //身高降序排列,人数...原创 2020-03-23 02:20:21 · 626 阅读 · 0 评论 -
有向无环图(邻接矩阵和邻接表)
一、图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。注:在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。二、图的遍历 图的遍历是在从图中某...原创 2020-04-08 01:23:39 · 8241 阅读 · 0 评论 -
leetcode刷题之树(三)
翻转二叉树,感觉做二叉树的问题好像都是那一套公式,除了个别的问题解决不了,用上篇博客leetcode刷题之树(二)的模型基本可以解决。总体来说就是树基本都可以利用递归和迭代的方法去解决,在涉及到树的遍历的时候偏向于利用栈来存储数据,在求和树的层次相关的问题时偏向于利用队列来存储数据。 个人感觉迭代更好理解,因为递归涉及回溯。class Solution {public: Tre...原创 2020-04-04 04:40:33 · 215 阅读 · 0 评论