C++编程单篇详解
以做过的编程为例,进行详细解析!
那些年那些事那些人
很多事情不是看到了希望才去坚持,而是坚持了才会看到希望;在人生的十字口,一定要慎重选择,一旦选择了就不要后悔;最后欢迎志同道合者,一起交流学习。
展开
-
16.判断空间某点是否在三角形内
方法一:内角之和等于360度或面积之和等于ABC面积;以二维点为例:三维同理;#include<iostream>#include<vector>#include<algorithm>#include<cstring>#include<sstream>#include<cmath>#include<unordered_map>#include <bitset>using namespace原创 2020-05-11 12:23:15 · 20027 阅读 · 6 评论 -
15.空格替换
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。方法一:使用新字符串时间复杂度O(n);空间复杂度为O(1);class Solution {public: void replaceSpace(char *str,int length) { string s;...原创 2020-05-05 23:10:53 · 18898 阅读 · 1 评论 -
14.减绳子三种方法
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)...原创 2020-05-03 22:54:05 · 9633 阅读 · 1 评论 -
13.二叉树的序列化和反序列化
题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序...原创 2020-04-30 16:54:29 · 10289 阅读 · 7 评论 -
12.删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5;/*struct ListNode { int val; struct ListNode *next; ListNode(int x) ...原创 2020-04-25 23:56:26 · 8802 阅读 · 1 评论 -
11.正则表达式的匹配
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配;解法:主要考虑pattern下一个字符是否为’*’;a当 '* '匹配0个字符时...原创 2020-04-24 21:57:45 · 8876 阅读 · 1 评论 -
17.C++ 与、或、异或、取反等运算
C++ & | ^ << >>等运算1.&按位与2.| 按位或3. 按位异或 ^4.按位取反~5.<<左移6.>>右移==7.应用==:位运算符号优先级别从高到低:~ & ^ |;其中~自由向左1.&按位与0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 &...原创 2020-04-20 13:23:09 · 15603 阅读 · 1 评论 -
18.c++ 排序心得
目录1.快排1.快排 void QuickSort(vector<int> &data,int left,int right) { int temp=data[left]; int i=left , j=right; if(i>j) return; while(i!=j) ...原创 2020-04-19 18:23:40 · 8998 阅读 · 1 评论 -
10.两个链表的第一个公共节点
题目:输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)暴力解法,时间复杂度为(m*n)/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/c...原创 2020-04-18 17:32:07 · 18916 阅读 · 1 评论 -
9.数组中的逆序对 C++
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,si...原创 2020-04-18 16:37:33 · 19266 阅读 · 1 评论 -
8.丑数 C++
目录题目描述:解法一:时间复杂度过大;思路正确就是不能通过;解法二:穷举法附加:判断质数;题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解法一:时间复杂度过大;思路正确就是不能通过;也有很多情况,时间运行太多,是因为无法跳出循环;确保不要修改+...原创 2020-04-17 17:08:44 · 19592 阅读 · 1 评论 -
7.把数组排成最小的树
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。自己的解法-尝试:使用两个数组,一个存放当前数的长度(位数)vec2,一个存放所有位数上的数之和vec;先按数组对numbers数组进行排序,再在排序的基础上按vec2对number进行排序;,但是发现最终拼起...原创 2020-04-16 22:26:32 · 18893 阅读 · 1 评论 -
6.算法中思路对,编写时的错误记录
目录1.将循环中的i,当变量使用;1.将循环中的i,当变量使用;题目:求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数);代码:c...原创 2020-04-16 19:20:56 · 8827 阅读 · 1 评论 -
5.字符串的全排序问题
目录题目描述:递归方法:非递归方法题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。递归方法:class Solution {public: vector&...原创 2020-04-13 21:32:40 · 8939 阅读 · 1 评论 -
4.滑动窗口解决字串问题
题目:小明最近在做病毒自动检测,他发现,在某些library 的代码段的二进制表示中,如果包含子串并且恰好有k个1,就有可能有潜在的病毒。library的二进制表示可能很大,并且子串可能很多,人工分析不可能,于是他想写个程序来先算算到底有多少个子串满足条件。如果子串内容相同,但是开始或者结束位置不一样,则被认为是不同的子串。注:子串一定是连续的。例如"010"有6个子串,分别是 "0, “...原创 2020-04-09 00:50:32 · 9702 阅读 · 9 评论 -
3.C++ 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字;,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.方法一:标记数组法基本思路:使用dx和dy用来表示前进的方向;其中分别表示向右,向下、向左、向上;使用flag用来标...原创 2020-04-03 19:25:11 · 10214 阅读 · 1 评论 -
2.输入两棵二叉树A,B,判断B是不是A的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构);方法一:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/...原创 2020-04-02 22:52:05 · 9572 阅读 · 1 评论 -
1.链表中倒数第k个节点
两种相同的方法不同的写法产生的问题:题目:输入一个链表,输出该链表中倒数第k个结点。写法1:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode*...原创 2020-03-31 15:13:32 · 9441 阅读 · 1 评论 -
19.调整数组奇偶数
题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。本题通过两种方法:方法一:直接在创建两个数组,遍历输入数组,将奇数存放到数组1中,将偶数存放数组2中,再将两数组合并;这样做时间复制度为O(N),空间复杂度为O(N);比较简单代码就不再这显示了方法二...原创 2020-03-31 00:59:30 · 9535 阅读 · 1 评论