C/C++学习
文章平均质量分 81
Amazingren
Do you prefer to sell sugar water for the rest of your life or come with me and change the world?
展开
-
【北京大学C++程序设计学习】——菜鸟的基础过关——类和对象
写在前面通过第一单元的梳理后现在觉得基本的框架是有了,也清晰了很多!加油,东西是死的,人是活的!1.内联成员函数和重载成员函数原创 2019-09-09 16:46:44 · 244 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-38-报数
Task:思路:首先自己刚拿到这个题的时候真的是一脸蒙蔽,都不知道要干什么,但是仔细读题之后,发现读懂题才是这道题的关键所在。看了几个示例,发现其实就是给定一个n,然后输出就是把n-1的那个数给报出来,这就是所谓的报数,也没啥难的,比如:1;11;21;1211这三个例子,当n=1的时候,其实就是特殊情况;后面的就是通用的了。当n=2的时候,返回的是11,意思就是:上一个(...原创 2019-06-17 09:48:29 · 335 阅读 · 1 评论 -
【LeetCode刷题】-C++-简单-198-打家劫舍
Task:思路:【解法一:遍历,奇偶分别求和】思路参考:首先这个题目,要明白的就是,偷了一间房子,那么与之直接相连接的房子是不能再去偷了,不然就要被抓住完蛋了!那么就要隔间偷,所以首先想到的就是分为奇偶数进行,但是这样有一个问题:我们的目标是要偷到的金额最大,那么只偷奇数或者只偷偶数就不能保证是最大的:因为可能有一段是奇数家的钱多,有一段是偶数家的qia多,所以需要找准一个时机。当...原创 2019-06-21 09:45:39 · 657 阅读 · 0 评论 -
【LeetCode刷题】- 设计循环队列
Task:思路:完全没有思路,相当于学习了,抄几道题代码:class MyCircularQueue {private: vector<int> a; int max; public: /** Initialize your data structure here. Set the size of the queue to be k. */...原创 2019-06-05 09:29:23 · 1249 阅读 · 0 评论 -
【LeetCodes刷题】-C++-简单-35-搜索插入位置
Task:思路:(一) 遍历的方法:(1)首先要进行的还是边界检查,如果给的target比nums[0]还要小,那么就包含在遍历的情况之中,如果比nums[nums.size()-1]还大,那就要单独考虑一下;(2)遍历的过程就是判断和选择的过程,如果当前的nums[i]的值大于等于target的话:a)如果大于的话,就说明target就应该插在这个nums[i]的前面,反过来想就是把...原创 2019-06-16 10:54:25 · 218 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-69-x的平方根
Task:思路:【方法1】内置函数:当然本题的初衷当然不是让这样做了,但是也要知道有一个内置函数可以用!代码:class Solution {public: int mySqrt(int x) { return sqrt(x); }};【方法2】二分查找:思路就是:(1)初始化边界i和j(2)找到中点mid= (i+j) / 2(3)re...原创 2019-06-20 10:58:07 · 215 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-21合并两个有序链表
Task:思路:这里用到了递归的思路:(1)首先还是边界检查:看看两个链表是不是空的,如果其中一个是空的,那就直接返回另外一个有序链表就好了!(2)如果非空的话,那就正常进行:比大小如果L1的value小于L2的,那么就递归的把L2和L1的下一个值进行比较一直进行下去如果L1的value大于L2的,那么就递归的把,L1和L2的下一个value进行比较再一直比较递归下去!代码:...原创 2019-06-15 17:12:04 · 395 阅读 · 3 评论 -
【LeetCode刷题】-C++-简单-20-有效的括号
Task:思路(1)首先还是边界检查,如果是给的空的字符串,那就直接给设定为有效字符串,返回true;(2)然后看看这个字符串能不能被2整除,如果不能被2整除,那就肯定不是有效括号;(3)排除了边界就要来到我们的算法的部分:a) 利用栈,遍历给定的字符串string s;b) 遇到左括号就压栈;c) 遇到右括号首先对这个时候栈是否为空(如果不为空则继续)d) 这个时候指定当前括号...原创 2019-06-15 16:26:21 · 487 阅读 · 0 评论 -
【LeetCode刷题】- 移动零
Task:思路遍历一次数组,将数组中非零元素与此时数组中第一个零元素交换位置。代码:class Solution {public: void moveZeroes(vector<int>& nums) { int k = 0; for( int i = 0; i < nums.size(); i++){ ...原创 2019-06-04 09:09:03 · 215 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-罗马数字转整数
Task:思路:首先最需要注意的就是把题目读懂,弄懂规则,这里最重要的就是下面的两个信息:可以看到需要特殊处理的就是I X 和 C 三个字符,他们分别在自己后面的两个数的左边和右边代表着不同的意思,就拿I和V来说,如果I在V的左边那就是要用V减去I,如果I在V的右边,那就直接是V加上I,剩下的也是一样的规律所以,我们需要注意!过度到算法:上面列出了基本的规则,下面...原创 2019-06-14 16:44:23 · 369 阅读 · 0 评论 -
【LeetCode刷题】- C++-简单-9回文数
Task:思路:边界检查:看题目,首先是边界检测:从例子以及题目要求看出:1.复数是不行的;2.末尾是0的但是这个数字又不是0的数字是不行的(因为末尾是零的回文数字只有它自己!)所以排除,是上面这两样的就直接返回false!算法:既然有了上面的建设而且昨天刷了整数翻转的题目,那就考虑把给定的数的一半给反过来,如果这个反过来的一半的数字和留下来的另外一半相当,那就是回文数字...原创 2019-06-14 11:32:00 · 391 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-58-最后一个单词的长度
Task思路:题目让返回最后一个单词的长度,那么首先想到的就是能不能倒着遍历,遇到了倒数第一个单词后面的那个空格就停止,然后返回前面的单词的长度!但是也有一些问题,比如最后一个单词后面并不就是结束,也有可能还是个空格,如果遇到这个空格就停下来的话,那就错误了,因此得设置flag来规避这种情况:代码:class Solution {public: int lengthOfLas...原创 2019-06-19 10:20:42 · 285 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-53-最大子序和
Task:解决方案:【1】暴力循环:思路:两层循环,第一层控制总的进度,第二层负责加并且验证;每当第一层循环给定一个起点,第二层循环就会从这个起点开始往后遍历加(先加一个,再加两个等等), 每次加完都会把新得到的sum的值和当前的最大值res_max进行比较,一直到把最大的sum赋给res_max才停止,否则就一直遍历寻找!时间复杂度:O(n2)代码:class Solution...原创 2019-06-19 09:54:31 · 287 阅读 · 0 评论 -
【LeetCode刷题】-翻转字符串的单词III
Task:思路:字符串这里我不太行代码:class Solution {public: string reverseWords(string s) { int n=s.length(); vector<int> temp; for(int i=0;i<n;i++) { ...原创 2019-06-03 10:49:36 · 170 阅读 · 0 评论 -
【LeetCode刷题】-杨辉三角2(输出第K行)
Task:思路:这个还是不太清楚,二刷的时候好好看!代码:class Solution {public: vector<int> getRow(int rowIndex) { rowIndex++; if(rowIndex<=0){ return {}; } else if...原创 2019-06-03 10:36:06 · 406 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-100-相同的树
Task:思路与算算实现对树有个稍微的了解先,看代码里给的定义:可以看出树有值:val;有左右节点:left 和right;有形式:节点:结点值、左孩子、右孩子、那么题目要求就是两个树一样,那就节点,左孩子,右孩子都一样!所以首先边界检查:(1)两个树都是空的,那没错了就是一毛一样;(2)如果都不空且值还相等,那就用递归的形式再去判断:这里条件就是看这个节点的左子树和右...原创 2019-06-25 09:42:03 · 380 阅读 · 0 评论 -
【LeetCode刷题】-岛屿数量
Task:思路:1.首先判断给定的二维数组是不是空的;2.对二维数组遍历一下,对每个元素进行判断,a)如果这个值等于1, 那么就把计数器+1, 并且对该元素四周进行深度搜索,3.返回代码:class Solution {public: int numIslands(vector<vector<char>>& grid) { ...原创 2019-06-12 10:37:57 · 809 阅读 · 0 评论 -
【北京大学C++程序设计学习】——菜鸟的基础过关——从C走进C++
写在前面唯一算是有点遗憾的事情吧,当初研一就应该过一遍的,但是一直拖着,每个月学一点,结果到现在就一直原地踏步,这些东西是躲不过的,做好自己吧。从C走进C++1. 函数指针每个函数占用一段连续的内存,函数名就是该函数的起始地址(入口地址),将该入口地址赋给一个 指针变量————————函数指针!可以通过该指针变量调用这个函数。2. 命令行参数这个太简单,就不说了,就...原创 2019-09-08 09:50:33 · 401 阅读 · 0 评论 -
【C++基础】—— new、delete 和 malloc、free 的区别
new、delete 和 malloc、free 的区别区别malloc&freenew&delete区别1C/C++语言的标准库函数C++的运算符区别2无法满足动态对象的要求,因为malloc&free是库函数而不是运算符,因此不再编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。new和delet...原创 2019-07-17 22:22:58 · 203 阅读 · 0 评论 -
【c++基础】——构造函数、析构函数以及拷贝构造
写在前面: 简单的说:一个对象出生的时候,使用构造函数,死掉的时候,使用析构函数构造函数 和 析构函数 各有各的用途,在构造函数中,我们来获取资源;在析构函数中,我们来释放资源。释放了之后,这些资源就会被回收,可以被重新利用。在构造函数里,我们去连接数据库的连接,在析构函数里关闭数据库的连接。在构造函数里动态的分配内存,那么在析构函数里把动态分配的内存回收。构造函数概念:类的构造函...原创 2019-07-16 11:57:53 · 241 阅读 · 0 评论 -
【C++基础】——#define宏定义
尽量以const, enum, inline替换 #define也就是说宁可以编译器替换预处理器#define不被视为语言的一部分,因为#开头就是预处理语句,当给定一个#define ASPECT_RATIO 1.653的时候,在编译器开始处理源码之前他就已经被预处理器移走了,所以就可能丢失了ASPECT_RATIO,当错误来自1.653的时候,但是这个宏定义又不是你自己写的,且来自于头文...原创 2019-07-14 22:47:47 · 388 阅读 · 0 评论 -
【C++基础】——指针,引用,指针与引用的简单区别
〇、基础1. 指针——pointer首选要明白指针的基础概念:那么, 何为指针???指针,指向某种类型对象的符合数据类型,理解为用于数组的迭代器.* 解引用操作符,可获得该指针所指向对象的值指针用于指向单个元素,迭代器只能用于访问容器内的元素具体来说:指针保存的是另一个对象的地址!2. 引用——reference就是对象的一个别名,主要用作函数的形式参数const引用是指...原创 2019-07-14 22:37:45 · 302 阅读 · 0 评论 -
【C++基础】——const是什么?什么时候用?与宏定义的区别
〇、什么是const(必须知道的事情)?简单理解:const的目的就是定义一个“不会被修改的常量”可以修饰:变量、引用、指针,可以用于函数参数、成员函数修饰。成员变量。作用:使用const可以减少代码出错的概率!避免magic number 以及增强程序的可读性。这个常量既可以防止程序其他地方不小心修改这个值,也能让程序员比较方便的调整这个值的大小。与宏定于#def...原创 2019-07-14 17:44:36 · 1999 阅读 · 1 评论 -
【LeetCode刷题】-C++-简单-108-将有序数组转换成二叉搜索树
Task:思路与代码思路:首先,得明白什么是二叉搜索树:看来一下百度百科二叉搜素数的意思:左子树的值小于根节点的值;右节点的值大于根节点的值;好了那么本题的意思是高度平衡二叉树,意思就是每个节点的左右两个子树的高度差的绝对值不超过1,那完美了,就二分吧,这样就满足不超过一的条件,大概思路:(1)把给定的已经排好序的数组二分,得到中点mid位置;(2)用这个中点当做这个树...原创 2019-06-28 10:47:31 · 500 阅读 · 0 评论 -
【LeetCodes刷题】-C++-简单-107-二叉树的层次遍历II
Task:思路与代码:还是用递归的思想,要读懂题目,反向输出的是一个int类型二维数组,所以就是vector<vector<int>>那么思路就出来了:(1)创建二维数组:(2)往数组里添加树的值(正向添加);(3)对创建的二维数组反向排序然后输出;这里重要的步骤就是第二步,就需要遍历树,这里设置一个level的变量,用来记录遍历到树的第几层,也就是树的深...原创 2019-06-28 10:18:53 · 324 阅读 · 1 评论 -
【LeetCode刷题】-C++-简单-104-二叉树的最大深度
Task:思路与代码:有了递归的思想之后这样的题目看起来还是蛮简单的,就是自己调用自己,给定一个节点,(1)如果节点为空,那就直接返回0;(2)否则(这个节点不是空的),那就用max函数找这个节点的最大深度(左孩子的深度和右孩子的深度中取最大的)(3)然后max里面又调用了函数本身,这就是递归,意思就是对于刚刚那个节点的左孩子和右孩子也是一样的,比如左孩子,那我们又以左孩子为当前节点,...原创 2019-06-28 09:15:47 · 405 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-88-合并两个有序数组
Task:解法和思路:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int i = m - 1; int j = n - 1; while(i >= 0 ...原创 2019-06-23 11:55:19 · 225 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-83-删除排序链表中的重复元素
Task:思路与解法:【解法一:双指针思路快慢指针法】(1)首先还是便捷检查,如果链表为空或者链表只有一个,那就直接返回链表;(2)常规情况:快慢指针一个在前一个在后,进行遍历,遇到元素相等的时候,如果快指针已经到头了,那就直接让慢指针的下一个元素指到NULL,如果没有到头,那就把快指针的下一个指给慢指针的next,然后再把快指针的下一个元素的赋值给快指针,相当于之前的q就没有了!...原创 2019-06-23 11:36:15 · 450 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-110-平衡二叉树
Task:思路和代码:想要解答这道题,就要知道什么是平衡二叉树,题目中给出了二叉树的定义:那就是每个节点的两个子树的高度差不能大于1,所以这个就是判定条件,如果满足,那么就是平衡二叉树;如果不满足,就不是平衡二叉树;那么现在的问题就是变成了,给定第一个节点的左右 两个子树的深度的问题了,所以用递归的策略,不断的去调用自己然后获得两个子树的深度,这个思路来自于第104的一道题目:二叉...原创 2019-07-01 17:14:53 · 358 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-101-堆成二叉树
Task:思路与代码:思路:题目要求的是判定给定的二叉树是不是堆成的,那么什么样的树才是堆成的呢?那就基本是第一个例子给出的完全二叉树了,否则怎么也不可能对称(比如那些缺胳膊少腿的肯定就不对称啊!)if( tree1 == NULL || tree2 == NULL) return false;然后就是就镜像相等!镜像相等镜像相等!所以这里同一个IsMirror()函数来实现,条件...原创 2019-06-26 09:39:35 · 292 阅读 · 0 评论 -
【LeetCode刷题】- 长度最小的子数组
Task思路:一个一个过,每增加一个计算一次综合sum,(1)如果计算出来的sum小于目标的值,那么就继续走;(2)如果计算出来sum的值>= 目标值,那么就记录一次此时的长度,保存在minlen中,然后把左端点+1,并且把前一个点的值减掉,然后(3)继续判断此时的和是否和目标值一样吗,如果小于的话退出while,开始for,如果还是大于或者等于,就继续把左端点右移一位,并且减去...原创 2019-06-03 09:44:28 · 220 阅读 · 0 评论 -
【LeetCode刷题】-两数之和 II - 输入有序数组
Task:思路:比较暴力的方法:两次循环:代码:方法一:暴力算法class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { vector<int> vRet; for(int i=0; i < nu...原创 2019-05-29 23:56:10 · 210 阅读 · 0 评论 -
【LeetCode刷题】-C++-简单-7-整数反转
Task:思路:主要是处理溢出,就是时时刻刻我们新的反转后的数组num要在[-2的31次方, 2的31次方- 1]这个区间之中,多以每次都要进行溢出的判断,如果溢出就返回0,没有溢出那就继续操作来翻转整数!代码:class Solution {public: int reverse(int x) { int num = 0; while(x){ ...原创 2019-06-13 16:03:11 · 185 阅读 · 0 评论 -
【LeetCode刷题】- 二进制求和
题目:思路:用了两个指针分别指向a和b的末尾,然后每次取出一个字符,转为数字,若无法取出字符则按0处理,然后定义进位carry,初始化为0,将三者加起来,对2取余即为当前位的数字,对2取商即为当前进位的值,记得最后还要判断下carry,如果为1的话,要在结果最前面加上一个1代码:class Solution {public: string addBinary(string a,...原创 2019-05-21 09:25:16 · 238 阅读 · 0 评论 -
【leetCode刷题记录】——两数加和——0511
【题目】:https://leetcode-cn.com/problems/add-two-numbers/【思路】:输入两个链表,输出一个链表。则需要新建一个链表,把输入的两个链表从头开始,每两个数值相加,添加一个新节点到新链表后面。需要考虑两个数相加时产生的进位,以及最高位的进位。【代码】:class Solution {public: ListNode* addTwoNu...原创 2019-05-11 08:56:32 · 159 阅读 · 0 评论 -
【LeetCode刷题】- 寻找数组的中心索引
题目:代码class Solution {public: int pivotIndex(vector<int>& nums) { int len = nums.size(); int right = 0; int left = 0; for (int i : nums){ r...原创 2019-05-15 09:01:14 · 355 阅读 · 0 评论 -
【LeetCode刷题】-杨辉三角
任务:思路:向量二维数组的表示,vector<vector> array; 然后对每一行rows进行处理,很容易观察出这样的表达式: rows[j]=(array[i-1][j-1]+array[i-1][j]); 处理完以后需要在末尾放入一。代码:class Solution {public: vector<vector<int>> g...原创 2019-05-20 08:57:34 · 195 阅读 · 0 评论 -
【LeetCode刷题】-螺旋矩阵
Task:思路:设置四个边界,然后走一圈代码:class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int>re; if(matrix.empty() || matrix[0...原创 2019-05-19 09:21:17 · 289 阅读 · 0 评论 -
【LeetCode刷题】-旋转数组
题目:代码:class Solution {public: void rotate(vector<int>& nums, int k) { if (nums.empty()) return; if (k>nums.size()) k = k%nums.size(); vector<in...原创 2019-05-14 09:02:27 · 193 阅读 · 0 评论 -
【leetCode刷题记录】-215. Kth Largest Element in an Array
【2019/03/03】Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.【思路一】对无序数组排序;返回第K个数;时间复杂度是O(nlogn),空间复杂度...原创 2019-03-05 11:36:48 · 142 阅读 · 0 评论