![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序设计基础
文章平均质量分 63
frostjsy
越努力,越幸运
展开
-
CodeTop整理-动态规划篇
返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。最大和求开始点和结束点。原创 2023-07-05 22:06:06 · 575 阅读 · 0 评论 -
寻找数组中缺失值
给你一个由n-1个整数组成的未排序的序列,其中元素都是1到n中的不同整数。请写出一个寻找序列缺失值的线性算法思路1:求n-1个数的和sum,用 n(n-1)/2-sum即可得到思路2:求n-1个数的异或a,将每个数和a进行异或就可得到相应的缺失的数。...原创 2018-07-07 12:58:12 · 1345 阅读 · 0 评论 -
char *s和 char s[]的 区别
在声明时,char *s=“hello”声明了一个字符串常量,在使用时不能被修改在声明时,char s[]=“hello”声明了一个字符串变量,在使用时能被修改作为函数的形式参数时,char *s,char s[]没有区别例如:f(char *s)等价于 f(char s[]) ...原创 2018-07-02 22:00:18 · 5989 阅读 · 0 评论 -
字符串之strcpy实现
字符串之strcpy实现#include <iostream>#include<assert.h>#include<string.h>using namespace std;char* strcpyT(char * des,const char * src){ assert((src!=NULL)||(des!=NULL)); char * p=de...原创 2018-07-03 11:40:20 · 611 阅读 · 0 评论 -
字符串之strcmp
//字符串之strcmp#include <iostream>#include<assert.h>#include<string.h>using namespace std;int strcmpT(const char * a,const char * b){ assert(a!=NULL&&b!=NULL); int ret=0; ...原创 2018-07-03 10:59:03 · 224 阅读 · 0 评论 -
在字符串中查找子串
题目:在字符串中查找子串。给定一个字符串A,要求在一个字符串中查找一个子串B。#include <iostream>#include<assert.h>#include<string.h>using namespace std;char * strfind(char *a,char * b){ assert(a!=NULL&&b!=NULL...原创 2018-07-03 13:57:37 · 3481 阅读 · 0 评论 -
字符串之strlen实现
#include <iostream>#include<assert.h>#include<stdlib.h>#include<string.h>using namespace std;int strlenT(const char * s){ //断言判断s为非空 assert(s!=NULL); int len=0; whi...原创 2018-07-03 10:42:31 · 195 阅读 · 0 评论 -
删除字符串中的空格
删除字符串开始和末尾的空白,若中间有多个空格转化为一个。思路:先删除开头和结尾的空格,再将中间连续的空格转化为一个#include <iostream>#include<string.h>using namespace std;char *delSpace(char * a){ if(a==NULL) return NULL; char *ps=a...原创 2018-07-05 10:38:21 · 2552 阅读 · 0 评论 -
将字符串中所有空格替换为20%
问题:将字符串中所有空格替换为20%思路:遍历字符串,统计空格数。根据空格数开辟空间,引入两个指针p1,p2,p1指向字符串结尾部分,p2指向开辟空间后的尾部;将p1指向的字符复制到p2处,遇到空格用20%替换。为了便于显示空格表示为‘-’#include <iostream>#include <string.h>using namespace std;void repla...原创 2018-07-05 15:27:00 · 1493 阅读 · 0 评论 -
移除字符串中重复的字符
问题:移除字符串中重复的字符思路1:遍历两遍字符重,移除重复的字符思路2:原创 2018-07-05 14:54:37 · 2002 阅读 · 0 评论 -
字符串转化为数字
问题:输入一个整数字符串,把该字符串转化为整数并输出。思路:需考虑几点:1、输入字符串是否为空2、结果是否能被整数表示3、开头字符为符号#include <iostream>#include<assert.h>#include<string.h>#include<limits.h>using namespace std;//全局变量用来标记输入的字符...原创 2018-07-03 15:42:21 · 1589 阅读 · 0 评论 -
在一个字符串中找到第一个只出现一次的字符
问题:在一个字符串中找到只出现一次的字符,如输入abaccdeff,则输出b,假设字符集为ASCII。思路:ASCII为长度为8的字符集,总共有256种可能。先遍历一遍字符串,将每个字母对应的ASCII值作为字符串计数数组的下标,统计每个字符出现的次数。在遍历一遍字符串将第一个计数为1的字符输出。#include <iostream>#include<string.h>us...原创 2018-07-05 11:11:06 · 4941 阅读 · 0 评论 -
最长公共子序列问题求解(LCS问题求解)
问题描述:输入两个字符串,求其最长公共子序列(公共子序列不要求子序列是连续的)思路:假设序列长度分别为m,n的序列X=<x0,x1,x2...xm>,Y=<y0,y1,y2...yn>,其公共子序列为Z=<z1,z2...zk>,则存在1、若xm=yn,则zk=xm=yn, Zk-1为Xm-1和Yn-1的最长公共子序列2、若xm!=yn且zk!=xm...原创 2018-07-19 11:42:40 · 417 阅读 · 0 评论 -
字符串移位包含问题
题目:给定两字符串s1和s2,要求判断s2能否被s1做循环移位得到字符串包含。思路:s1循环移位得到的其实是s1s1的子串,我们只需判断s1s1是否含有s2。#include <iostream>#include<string.h>#include<assert.h>using namespace std;bool find(const char * a,con...原创 2018-07-03 14:22:59 · 1110 阅读 · 0 评论 -
字符串之strcat的实现
字符串之strcat的实现#include <iostream>#include<assert.h>#include<string.h>using namespace std;char* strcatT(char * des,const char * src){ assert((src!=NULL)||(des!=NULL)); char * p=d...原创 2018-07-03 11:35:46 · 344 阅读 · 0 评论 -
字符串中单词的逆转
题目:字符串中单词的逆转,即将字符串中单词出现的顺序逆转。例如“Today is Friday!”,逆转后得到“Friday! is Today”。思路:先将整个字符串逆转,再将每个单词逆转。#include <iostream>#include<string.h>using namespace std;void reverseT(char * ps,char * pe){...原创 2018-07-04 20:44:08 · 217 阅读 · 0 评论 -
两个很大数的乘法
输入两个很大的数(用字符串表示),输出他们的乘积,假定不考虑非法输入思路:原创 2018-07-03 17:35:08 · 795 阅读 · 0 评论 -
判断一个字符串中所有字符都不一样
问题:给定一个字符串,判断每个字符串都不一样思路:ASCII为长度为8的字符集,总共有256种可能。申明一个bool类型的数组a,先遍历一遍字符串,将每个字母对应的ASCII值作为a数组的下标,记录每个字符是否出现。若已出现返回false,否则true。#include<iostream>#include<string.h>#include<assert...原创 2018-07-05 11:47:46 · 993 阅读 · 2 评论 -
删除模式串中出现的字符
删除模式串中出现的字符,例如“welcome to asted,模式串为“aeiou",得到的字符串为"wlcm t std"思路:遍历每个字符串,逐个删除#include <iostream>using namespace std;/*//数组形式实现char * strdel(char *a, const char * b){ if(a==NULL||b==NULL) ...原创 2018-07-04 21:23:00 · 238 阅读 · 1 评论 -
动态规划专题
1、动态规划要素动态规划的三要素:最优子结构,边界和状态转移函数,最优子结构是指每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到(子问题的最优解能够决定这个问题的最优解),边界指的是问题最小子集的解(初始范围),状态转移函数是指从一个阶段向另一个阶段过度的具体形式,描述的是两个相邻子问题之间的关系(递推式) 重叠子问题,对每个子问题只计算一次,然后将其计算的结果保存到一个表格中,每一次需要上一个子问题解时,进行调用,只要o(1)时间复杂度,准确的说,动态规划是利用空间去换取时间的算法.原创 2020-10-10 09:36:51 · 249 阅读 · 1 评论 -
调用函数用new申请空间的释放方法
问题:调用函数用new申请空间,如果不释放则会存在内存泄露问题调用函数用new申请空间的释放方法方法一:将要反馈的结果赋值给一个栈元素,栈元素会随着函数调用的完成而自动释放占用的空间。方法二:用一个指针p接受这个返回地址,然后再释放这个指针指向的空间程序实现第一种方案#include <iostream>#include<string.h>u...原创 2018-07-19 11:56:10 · 4465 阅读 · 1 评论 -
树专题
1、树基本概念给定一个无向图G,如果:i)G是连通的;ii)G是无环的,则G是一棵树。满二叉树:叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点 完全二叉树:叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大 二叉查找树:Binary Search Tree,二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值 平衡查找树:二叉树中任意一个节点的左右子树的高度原创 2020-10-16 00:26:52 · 276 阅读 · 0 评论 -
字符串专题
3. 无重复字符的最长子串难度:中等题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的原创 2020-10-20 00:47:27 · 646 阅读 · 0 评论 -
hash散列冲突解决方法
什么是hash冲突?假设hash表的大小为9(即有9个槽),现在要把一串数据存到表里:5,28,19,15,20,33,12,17,10简单计算一下:hash(5)=5, 所以数据5应该放在hash表的第5个槽里;hash(28)=1,所以数据28应该放在hash表的第1个槽里;hash(19)=1,也就是说,数据19也应该放在hash表的第1个槽里——于是就造成了碰撞(也称为冲突,collision)。常用的Hash冲突解决方法有以下几种:1.开放定址法这种方法也称再散列法,其基本思想转载 2020-10-26 23:39:02 · 891 阅读 · 0 评论 -
dfs与bfs搜索专题
1、dfs与bfsdfs与bfs一般存在于树搜索和图搜索中,dfs一般以递归的方式实现;bfs用一队列来进行搜索;数一般以链表的方式存储;图存储一般有两种方式:邻接矩阵,邻接表。回溯法 :一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解的话(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-le原创 2020-10-12 00:49:42 · 229 阅读 · 0 评论 -
CodeTop整理-树篇
【代码】CodeTop整理-树篇。原创 2023-07-10 23:22:48 · 227 阅读 · 0 评论 -
CodeTop整理-链表篇
【代码】CodeTop整理-链表篇。原创 2023-07-05 23:25:50 · 130 阅读 · 0 评论 -
CodeTop整理-排序篇
【代码】CodeTop整理-排序篇。原创 2023-07-05 23:08:29 · 367 阅读 · 0 评论 -
CodeTop整理-字符串篇
输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2。输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。输出: [["bat"],["nat","tan"],["ate","eat","tea"]]输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。原创 2023-07-05 22:47:21 · 597 阅读 · 0 评论 -
CodeTop整理-数组篇
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。输入:nums = [2,6,4,8,10,9,15]原创 2023-07-05 22:49:09 · 854 阅读 · 0 评论 -
链表专题
1、链表链表有单链表,双链表,环形链表;链表主要功能是将离散的地址通过指针连接起来。2、原创 2020-10-13 23:50:27 · 227 阅读 · 0 评论 -
两个栈实现队列的功能
题目:用两个栈实现队列 栈:先进后出 队列:先进先出思路:申明两个栈s1,s2,s1用来进栈,s2用来出栈,如果s2为空,则将s1中的元素pop到s2中,然后再将s2中的元素输出,如果s2的元素不为空,则直接输出。 ...原创 2018-07-25 21:24:26 · 154 阅读 · 0 评论 -
C++标准库--stack 与其应用(栈元素的升序排列)
参考 网址:https://blog.csdn.net/lanzhihui_10086/article/details/42426521(带有stack类的重新实现)https://blog.csdn.net/m0_37561165/article/details/81114441(c++标准库stack和queue的简单使用)1、stack的引入和使用stack存在于STD<...原创 2018-07-25 17:29:34 · 2036 阅读 · 0 评论 -
对源串或目标串进行插入、修改、删除操作使其一致,求最小的操作次数
问题:对源串或目标串进行插入、修改、删除操作使其一致,求最小的操作次数思路:两个串分别为A[0:m],B[0:n],对于A[0]=B[0], f(A[0:m],B[0:n])=f(A[1:m],B[1:n])对于A[0]!=B[0], 3种操作作用于A,B插入:对A插入一个与B [0]相同的数, f(A[0:m],B[0:n])=f(A[0:m],B[1:n])+1 ...原创 2018-07-19 22:15:59 · 867 阅读 · 0 评论 -
一个整型数组除了两个数之外,其他数都出现了两次,找出这两个数组在O(n)时间内
一个整型数组除了两个数之外,其他数都出现了两次,找出这两个数组在O(n)时间内思路:首先将这个数组中所有的元素进行异或操作,即得到了这两个数组的异或结果。由于这两个数不相同,故异或结果中必然有某一位为1。将原始数组分为此位为1和为0的两个子数组,就转化成了在两个数组中找其他出现两次,存在某个数只出现一次的问题。对所有元素进行异或操作就可以得到这个数。#include <iostream>...原创 2018-07-07 16:47:06 · 307 阅读 · 0 评论 -
移位运算练习
1、统计一个整数n表示为二进制后,1的个数2、统计两个整数m,n,将m转化为n需要改变的位数3、将一个整数N的i到j位替换为M。1、思路:每次将n减去1再做与运算,将n最右边的数由1变为0,那么一个数中有多少个1,就需做多少次这样的运算,n=n&(n-1)直到n=0。2、思路:先将两个数做异或运算,再统计运算后的数中二进制表示1的个数,即需改变的位数3、思路:保留左边j-n位,保留右边0-...原创 2018-07-07 15:07:19 · 374 阅读 · 0 评论 -
位操作求平均数
实现位操作求两个数x,y的平均数(x&y)+((x^y)>>1)原创 2018-07-07 13:15:01 · 188 阅读 · 0 评论 -
不使用算术运算符的加法实现
不使用算术运算符的加法实现思路:二进制表示时,1+1=0,0+0=0,1+0=1,0+1=1类似于异或运算。仅当两者均为1时,产生进位即1+1=1,类似于1&1运算#include <iostream>using namespace std;int add(int a,int b){ if(b==0) return a; int sum=a^b; int ca...原创 2018-07-07 13:12:31 · 414 阅读 · 0 评论 -
可变参数的函数运算
写一个可以接受多变参数的函数,实现加法运算#include <iostream>using namespace std;//num为参数个数int add(int num,...){ int *p=(int*)&num+1; int sum=0; for(int i=0;i<num;i++) { sum+=*p; p++;...原创 2018-07-12 10:25:10 · 195 阅读 · 0 评论 -
c/c++内存管理与释放
c/c++内存主要分为:栈,堆,静态区,文字常量区,代码区栈区:编译系统自动分配存放函数的参数,局部变量等。堆区:程序员分配,一般由(new delete),(malloc,free)分配释放静态区:存放静态成员变量文字常量区:存放文字常量具体例子:...原创 2018-07-12 09:26:00 · 196 阅读 · 0 评论