c++leetcode
机械吴哥123
我很懒,不想写简介
展开
-
【二叉树遍历迭代伪代码】前序遍历、中序遍历、后序遍历
前序遍历伪代码:栈s;p = root;while(p || s 不为空) while(p) 访问p; p右入栈; p = p左; p = s顶; 弹出s顶; }}后序遍历:栈s;p = root;while(p || s 不为空) while(p) 访问p; p左入栈; p = p右; p = s顶; 弹出s顶; }}p逆序输出中序遍历:栈s;p = root;.原创 2020-08-29 15:04:14 · 1880 阅读 · 0 评论 -
面试题 05.08. 绘制直线【位运算】
绘制直线。有个单色屏幕存储在一个一维数组中,使得32个连续像素可以存放在一个 int 里。屏幕宽度为w,且w可被32整除(即一个 int 不会分布在两行上),屏幕高度可由数组长度及屏幕宽度推算得出。请实现一个函数,绘制从点(x1, y)到点(x2, y)的水平线。给出数组的长度 length,宽度 w(以比特为单位)、直线开始位置 x1(比特为单位)、直线结束位置 x2(比特为单位)、直线所在行数 y。返回绘制过后的数组。补充一下知识点:1/计算机中,整数采用补码存储整数int类型,int在计算机中占原创 2020-06-16 17:51:03 · 183 阅读 · 0 评论 -
【leetcode】面试题 03.03. 堆盘子vector_stack的使用
堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。当某个栈为空时,应当删除原创 2020-06-15 15:41:43 · 138 阅读 · 0 评论 -
【leetcode】最强边界条件
数组的边界1144. 递减元素使数组呈锯齿状给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一,则数组 A 就是 锯齿数组:每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > ...或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2] < A[3] > A[4] < ...返回将数组 n原创 2020-06-12 22:47:47 · 249 阅读 · 0 评论 -
【leetcode】二进制手表-经典或回溯题目
回溯,题目的本意就是找组合。返回多少种不同的组合。比如说从N个数里面找出K个数不同的组合。回溯六步骤:1 画出递归树,找到状态变量。本题的状态变量有:给定的总数num,组合的初始值start,以及每种不同的组合所对应的时间,这里用pair<int,int> time接收。因此,递归树可以写成如下:void Time(int sum, int start, pair<int,int>& time)2 找到终止点并处理这里当num = 0 的时候就是终止的时候。原创 2020-06-09 10:46:46 · 204 阅读 · 0 评论 -
【leetcode】二分查找经典题目
1/x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去class Solution {public: int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; if ((long long)mid * mid <= x)原创 2020-06-07 09:35:21 · 186 阅读 · 0 评论 -
【set】
set<int> my_set;my_set.insert(a);my_set.erase(iter); //输入迭代器my_set.clear();my_set.empty();my_set.begin();my_set.end();my_set.size();my_set.find(a); //返回迭代器my_set.rbegin(); // my_set.rbegin() = my_set.end()-1;my_set.rend(); /原创 2020-06-05 11:29:40 · 110 阅读 · 0 评论 -
【set容器】
C++ STL 提供求交集的函数 set_intersection( ) 、求集合差的函数 set_difference( ) 和合并两个集合的函数 set_union( )。首先传递的容器必须是排序的,set 容器中元素默认是排序的,而 vector 需要调用 sort 函数进行排序。其次 set_intersection( )中最后存放交集的容器的容量必须要足够大到能放下所有的元素,即函数只执行复制,不是插入!但是模板 insert_iterator 可以将复制转换为插入,可以解决该问题。set_i原创 2020-06-05 11:23:35 · 120 阅读 · 0 评论 -
【map知识点总结】
1 map自动按照升序进行排列2 map(key,value)的value如果减为0,那么自动删除这个keym.begin()是开头,m.rbegin()是结尾,同理m.rend()是开头,如果遍历的话也是++练习题:上升下降字符串class Solution {public: string sortString(string s) { if(s.size() <= 1) return s; std::map<char, int> m; f原创 2020-06-03 20:21:07 · 209 阅读 · 0 评论 -
【leetcode】数组建树
将有序数组转换为二叉搜索树class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) { return build(nums, 0, nums.size() - 1); } TreeNode* build(vector<int>& nums,int l,int r) { if(l > r) return NULL; .原创 2020-06-03 17:04:55 · 658 阅读 · 0 评论 -
【leetcode】遍历二叉树从跟到叶子的核心代码
从根到叶的二进制数之和 void s(TreeNode* root) { if(!root) { return; } if(!root->left && !root->right) { v.push_back(root->val); vec.push_back(v); } v.push_back(root->val); auto v2 = v;原创 2020-06-02 18:55:37 · 125 阅读 · 0 评论 -
【leetcode】利用队列实现二叉树的层序遍历
class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> s; if(root == nullptr) return s; queue<TreeNode*> _s; _s.push(root); while(!_s.empty()) {原创 2020-06-02 16:09:25 · 130 阅读 · 0 评论 -
【leetcode】二叉树的深度以及树是否平衡的问题
我把这两个问题归为一类问题。因为其核心思想都是用递归去实现的。实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。判断树是否平衡的代码:class Solution {public: bool balance=true; bool isBalanced(TreeNode* root) { height(root); return balance; } int height(Tre原创 2020-06-01 11:16:22 · 175 阅读 · 0 评论 -
【leetcode】动态规划优秀题目
爬楼梯(斐波那契数列的衍生)假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?class Solution {public: int climbStairs(int n) { int res_first = 0, res = 1; for (int i = 1; i <= n ; i ++) res = res_first + res; res_first = res -.原创 2020-05-31 11:34:07 · 110 阅读 · 0 评论 -
【leetcode】山羊文
class Solution {public: string toGoatLatin(string S) { stringstream ss(S); string res; int count = 0; string word; while(ss >> word){ count++; if(word[0]=='a' || word[0]=='e' || word[0]=='i' || word[0]=='o' ||原创 2020-05-30 17:15:35 · 98 阅读 · 0 评论 -
【leetcode】心得
字符串判断字符串的长度:c.length();从字符串的头部插入字符:c.insert(c.begin(),n)查找元素:c.find(" ",从,begin())原创 2020-05-30 16:03:25 · 220 阅读 · 0 评论 -
【leetcode】557. 反转字符串中的单词 III-原地算法
class Solution {public: string reverseWords(string s) { //边界条件 int len = s.length(); if(len == 0){ return s; }; //外判断 int start = 0; int end = s.find(" "); while(end != -1){ reverse(s.begin()+st原创 2020-05-30 11:43:55 · 139 阅读 · 0 评论 -
【leetcode】数组的度-两个map关联初探
class Solution {public: unordered_map<int,vector<int>> m;//统计开始和结束坐标 unordered_map<int,int> m1;//统计度 int findShortestSubArray(vector<int>& nums) { int max=0;//统计最大频数 int min=50000;//统计最短长度 //统计所有字符开始的坐标原创 2020-05-23 14:39:17 · 158 阅读 · 0 评论 -
【leetcode】图片平滑器
class Solution {public: vector<vector<int>> imageSmoother(vector<vector<int>>& M) { int m = M.size(), n = M[0].size(); vector<vector<int>> result(m, vector<int>(n)); for (int i = 0; i <原创 2020-05-22 21:40:47 · 206 阅读 · 0 评论 -
【leetcode】杨辉三角Ⅱ
class Solution {public: vector<int> getRow(int rowIndex) { vector<int> kRows(rowIndex+1);//第K行的vector大小为 rowIndex+1 for(int i = 0; i <= rowIndex; i++)//利用前一行求后一行,第K行要循环K遍 { kRows[i] = 1; //行末尾为1 for(int j原创 2020-05-22 17:01:01 · 91 阅读 · 0 评论 -
【leetcode】复写零
class Solution {public: void duplicateZeros(vector<int>& arr) { int size = arr.size(); int offset = 0; // 第一次遍历,计算数组中0的个数 for (int i=0; i<size; i++) { if (!arr[i]) offset++; } // 第二次遍历,从后向前按偏移量移动元素原创 2020-05-22 15:27:13 · 151 阅读 · 0 评论 -
【leetcode】最大子序和-动态规划法
class Solution{public: int maxSubArray(vector<int> &nums) { int temp = nums[0]; int result = temp; for (int i = 1; i < nums.size(); i++) { emp = max(temp + nums[i], nums[i]); resul原创 2020-05-21 18:08:47 · 72 阅读 · 0 评论 -
【leetcode】在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
利用容器进行二维数组的表示初探class Solution {public: vector<vector<int>>matrixReshape(vector<vector<int>>& nums, int r, int c) { if (nums.empty() || nums[0].empty()) return nums; int R = nums.size(); int C = nums[0].size()原创 2020-05-21 17:01:21 · 540 阅读 · 0 评论 -
【leetcode】1018. 可被 5 整除的二进制前缀
利用取余的方法防止数值越界class Solution {public: vector<bool> prefixesDivBy5(vector<int>& A) { vector<bool> answer; int sum = 0; for(int i = 0; i<A.size(); ++i) { sum = 2*(sum + A[i]); sum %= 5;原创 2020-05-21 12:49:20 · 135 阅读 · 0 评论 -
【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
class Solution {public: int findPairs(vector<int>& nums, int k) { unordered_map<int, int> map; int count = 0; if(k < 0)//好坑不止有-1 还有-157 return 0; if(k == 0) { //当k=0时,其实就是找数组中有没有重复元素 且重复原创 2020-05-21 10:46:01 · 2157 阅读 · 2 评论 -
【leetcode】返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量
class Solution {public: int numPairsDivisibleBy60(vector<int>& time) { int s=0; vector<int> a(60,0); for(int i=0;i<time.size();i++) a[time[i]%60]++; s=s+a[0]*(a[0]-1)/2+a[30]*(a[30]-1)/2; for(int j=1;j<30原创 2020-05-20 22:23:50 · 109 阅读 · 0 评论 -
【C++leetcode】寻找给定字符串的最大回文子串
方法一:暴力搜索法方法简介:从第一个字符开始进行翻转与自己比较如果相等就是回文,依次增加和右移class Solution {public: string longestPalindrome(string s) { string res="";//存放结果 string temp="";//存放子串 for(int i=0;i<s...原创 2020-05-05 16:44:14 · 276 阅读 · 0 评论 -
【c++leetcode】翻转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list本人解题...原创 2020-05-03 08:36:01 · 142 阅读 · 0 评论 -
【c++leetcode】判断一个数是否是2的幂、3的幂、4的幂
2的幂题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。思路:一个数是2的次方那么它32位上只能有一个1,其他都是0方法1:通过将这个数与1进行&运算,判断1的个数是否是1.class Solution {public: bool isPowerOfTwo(int n) { int t = n; int ones = 0;...原创 2020-05-02 10:13:47 · 1172 阅读 · 0 评论