自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(180)
  • 收藏
  • 关注

原创 c缺陷与陷阱 第3章 语义陷阱

1. 指针与数组c语言中的数组要注意以下两点:下面的方法存在问题,因为数组的大小必须在编译期作为一个常数确定下来。a[3][4] 本质也是一个一维数组(包含3个元素),只不过一维数组中的元素是也是数组(包含4个元素)。int ar[10] = { 0 }; 注意:数组名代表的是整个数组空间。由sizeof(ar)=40 可以体现。三者的内容相同,但解释是不同的。&a[0] 针对首个元素取地址。ar 数组名包含的内容,恰好是数组首元素的地址。&amp..

2022-01-02 13:36:35 558

原创 leetcode43. 字符串相乘

思路:首先,因为 输入num1和num2的长度肯定会超过 内置的变量类型 因此不能直接转化为 数字在相乘最后相加(1) 长度为m 和长度为n的两个数相乘,得到的结果res的长度为[m+n-1, m+n] 因此设定结果的长度为m+n(2) 另外一个关键是,利用小学竖式计算的原理。num1[i] 与num2[j] 相乘得到的结果对应res的 i+j位和i+j+1位class Solution {public: string multiply(string num1, stri..

2022-01-02 10:18:01 250

原创 数据结构-树

树树:t是一个有限元素集合,其中一个元素为根(root),另外的元素组成t的子树。树的级:根的级为1,其孩子的级为2,其孩子的孩子的级为3.节点的度:即某个节点的子女数目称为该节点的度。二叉树(binary Tree)二叉树(binary tree) t 是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个称为根的元素,余下的元素(如果有的话)被组成 2个二叉树,分别称为t的左子树和右子树.树和二叉树的区别(1)树不可以为空,但是二叉树可以为空。(2)二叉树中每个节点.

2022-01-02 10:17:17 1658 1

原创 SVN常用命令

SVN命令使用详解 - qingfeng_Fy - 博客园

2021-12-08 11:51:08 301

原创 专题复习:三数之和

(1) leetcode15. 三数之和思路:先将nums进行排序 然后,在利用双指针class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if(nums.size()==0) return {}; vector<vector<int>> res; //对数组进行排序

2021-08-04 22:49:23 68

原创 专题复习:回溯法

回 溯 算 法 实 际 上 一 个 类 似 枚 举 的 搜 索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯 ” 返 回 , 尝 试 别 的 路 径 。 回 溯 法 是 一 种 选 优 搜 索 法 , 按 选 优 条 件 向 前 搜 索 , 以 达 到 目标。但 当 探 索 到 某 一 步 时 , 发 现 原 先 选 择 并 不 优 或 达 不 到 目 标 , 就 退 回 一 步 重 新 选 择 ,这 种 走 不 通 就 退 回 再 走 的 技 术 为 回 溯 法 , 而

2021-08-04 21:55:29 88

原创 专题复习:贪心算法

贪 心 算 法 ( greedy algorithm ) 就 是 这 样 的 算 法 , 它 在 每 一 步 都 做 出 当 时 看 起 来 最 佳 的选择。也就是说,它总是做出局部最优的选择,寄希望这样的选择能导致全局最优解。(1)leetcode455. 分发饼干思路:首先将两个数组g 和 s进行排序然后,优先满足饭量小的孩子一种最简单的方式就是先从胃口最小的孩子开始,拿最小的饼干试一下能不能满足他,如果能满足就更好,如果不能满足,在找稍微大一点的,如果还不能满足就再找更大一点的.

2021-08-01 22:16:48 78

原创 专题复习:动态规划(1)

NC127最长公共子串https://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac?tpId=188&&tqId=38644&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking定义dp[i][j] 表 示 字 符 串 str1 中 第 i 个 字 符 和 str2 种 第 j 个 字 符 为 最 后 一 个.

2021-08-01 21:33:11 148

原创 背包问题(0-1背包 和完全背包)

(1)0-1背包问题背包问题是动态规划中最经典的一道算法题。背包问题的种类比较多,我们先来看一个最简单的背包问题-基础背包。他是这样描述的。有N件物品和一个容量为V的包,第i件物品的重量是w[i],价值是v[i],求将哪些物品装入背包可使这些物品的重量总和不能超过背包容量,且价值总和最大。我们先来举个例子分析一下。举例子:假设我们背包可容纳的重量是4kg,有3样东西可供我们选择,一个是高压锅有4kg,价值300元,一个是风扇有3kg,价值200元,最后一个是一双运动鞋有1kg,价值150元

2021-07-30 22:06:54 355

原创 专题复习:位运算

剑指 Offer 15. 二进制中1的个数方法一: 进行移位操作class Solution {public: int hammingWeight(uint32_t n) { int count = 0; for(int i = 0; i < 32; i++) { if(n>>i&1) count++; } return count; }};方法

2021-07-28 22:52:09 351

原创 专题复习:双指针(1) 滑动窗口(前提是:有序数组)

leetcode1423. 可获得的最大点数思路:由于必须包含数组的首元素或者尾部元素。可以采用在数组的两端来滑动。代码如下,首先,sum为数组中前k个元素之和,然后,窗右边往左划,tempsum - 出窗的元素,窗左边往左滑,到数组的末尾,tempSum + 进窗的元素,一直到窗中不包含首位元素或者末尾元素。class Solution {public: int maxScore(vector<int>& cardPoints, int k) { ..

2021-07-25 23:16:44 155

原创 专题复习:二叉树(3)

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

2021-07-24 21:26:02 246

原创 专题复习:二叉树(2)

剑指 Offer 27. 二叉树的镜像方法一:利用辅助队列以广度优先的顺序将 节点依次存入辅助队列中class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if(!root) return NULL; queue<TreeNode*> a; a.push(root); while(!a.empty()) { ..

2021-07-24 11:43:55 57

原创 专题复习:二叉树(1)

(1)最基本的二叉树的 先序 中序 后序遍历//先序遍历void preOrder(ListNode* root){ if(!root) return; cout << root->val <<endl; preOrder(root->left); preOrder(root->right);}//中序遍历void medOrder(ListNode *root){ if(!root) return; me

2021-07-23 20:54:03 58

原创 专题复习二:链表(2)

leetcode86. 分隔链表首先将链表分隔为比目标值小的一段和比目标值大的一段需要四个指针class Solution {public: ListNode* partition(ListNode* head, int x) { if(!head) return nullptr; //不能直接让smallHead 或者 bigHead直接等于head 原因是不确定head-》val与x的大小关系 ListNode* smallHea.

2021-07-21 21:57:00 110

原创 专题复习二:链表(1)

链表是笔试中最常考的一类题目(1)剑指 Offer 24. 反转链表要实现链表的翻转,一定需要三个临时节点,否则无法实现翻转方法一:不构建新的节点class Solution {public: ListNode* reverseList(ListNode* head) { if(!head) return NULL; ListNode *p = head->next; if(!p) return head; L

2021-07-20 23:13:53 109 1

原创 专题复习一:单调栈

栈(stack)是一种特殊的数据结构,但也是一种容易理解的数据结构,它的特点就是先进后出,生活中有很多栈的例子,比如装乒乓球的直筒,最先进入的球到达桶底,然后一个一个进入,最后进入的球在出桶的时候是第一出来,最先进去的是最后一个出来。本文所提到的单调栈其实就是在普通栈的基础上加上了单调的特性,栈内元素保持单调递增或者单调递减的特性。一、 基础案例(1)数组内下一个更大的元素给你一个数组nums,请返回一个等长的数组,这个等长数组对应于nums的相同位置存储着下一个更大元素,如果没有更大元素,请存

2021-07-20 20:43:42 46

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先

思路:参考K神答案, 利用先序遍历class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(!root) return NULL; if(p==root||q==root) return root; TreeNode* left = lowestCommonAncestor(root-..

2021-07-19 23:27:44 94 1

原创 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

因为二叉搜索树满足如下条件:root->left的值要小于root->val root->right的值要大于root->valclass Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(!root) return NULL; if(p->val < root-&g...

2021-07-19 23:07:25 47

原创 剑指 Offer 65. 不用加减乘除做加法

思路:位运算(a&b)<<1 进位 a^b 是非进位和 (不包含进位的结果) 另外,c++不支持负数的移位,需要加上转换为非负数后操作注意: c++不支持class Solution {public: int add(int a, int b) { if (b == 0 || a == 0) { return a^b; } return add(a ^ b, ((unsigned i

2021-07-18 22:24:35 50

原创 剑指 Offer 64. 求1+2+…+n

思路:参考K神方法,利用逻辑运算符的短路效应首先看迭代的方法:class Solution {public: int sumNums(int n) { if(n == 1) return 1; n += sumNums(n-1); return n; }};由于题目中要求不能用ifclass Solution { int res = 0;public: int sumNums(int n) .

2021-07-18 11:38:15 74

原创 剑指 Offer 63. 股票的最大利润

方法一: 利用滑动窗的方法class Solution {public: int maxProfit(vector<int>& prices) { int max = 0; int size = prices.size(); if(size <= 1) return max; int left = 0, right = 1; while(left < righ

2021-07-18 09:48:12 40

原创 剑指 Offer 62. 圆圈中最后剩下的数字

思路:约瑟夫环 采用动态规划 根据K神思路class Solution {public: int lastRemaining(int n, int m) { int res = 0; for(int i = 1; i <= n; i++)// i表示 从i个数字中删除第m个数字 { res = (res + m)%i; } return res; }};..

2021-07-18 08:58:19 31

原创 剑指 Offer 61. 扑克牌中的顺子

思路:刚开始不明白题意,参考k神思路将顺子问题转化为nums[4] - nums[j] <5 非常巧妙先对nums进行排序, 如果nums中 存在重复的牌(joker除外),那么返回fasle另外,如果nums中不含0(即joker)时, nums[4] - nums[0] < 5 说明nums是顺子当nums中包含0时,nums[4] - nums[j] <5 时,(其中j表示首个不为joker的数字在数组中的索引)说明nums是顺子class So...

2021-07-17 23:36:24 50

原创 剑指 Offer 58 - II. 左旋转字符串

方法一:利用c++中STL的substr ,用于获取字符串的子串,s.substr(0, n) 表示截取s的从0起始,n个字符的子串。class Solution {public: string reverseLeftWords(string s, int n) { int len = s.length(); return s.substr(n, len - n) +s.substr(0, n); }};方法二: 利用新的字符串.

2021-07-17 20:40:14 29

原创 剑指 Offer 58 - I. 翻转单词顺序

class Solution {public: string reverseWords(string s) { if(s.empty()) return ""; s+=" "; string temp = ""; vector<string> res; int len = s.length(); for(int i = 0; i < len; i++) { if(s[i] == ' ') {.

2021-07-16 23:42:47 39

原创 剑指 Offer 57 - II. 和为s的连续正数序列

思路:利用滑动窗口法(没有想到) 根据K神的思路class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> res; if(target <= 2) return res; int i = 1, j = 2, sum = 3;//i 滑..

2021-07-16 22:19:40 32

原创 剑指 Offer 57. 和为s的两个数字

思路一: 双指针,从数组左右两边开始依次查找class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i = 0, j = nums.size()-1; while(i < j) { if(nums[i] + nums[j] == target) return vector<i

2021-07-16 21:20:42 28

原创 剑指 Offer 56 - II. 数组中数字出现的次数 II

思路:位运算class Solution {public: int singleNumber(vector<int>& nums) { int res = 0; for(int i = 0; i < 32; i++) { int count = 0; //用于统计i位上1的个数 int m = 1<<i; //统计

2021-07-16 21:14:30 33

原创 剑指 Offer 56 - I. 数组中数字出现的次数

class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int x = 0, y = 0, n = 0, m =1; int size = nums.size(); for(int i = 0; i < size; i++) { n ^= nums[i]; //得到的n是两个出现一次的.

2021-07-14 23:10:17 41

原创 剑指 Offer 55 - II. 平衡二叉树

思路:利用上一题中求树的最大深度class Solution { bool res = true; int dfs(TreeNode *root)//计算左右子树的最大深度 { if(!root) return 0; int left = dfs(root->left); int right = dfs(root->right); if(abs(left -right) > 1) //如果左..

2021-07-14 22:20:25 39

原创 剑指 Offer 55 - I. 二叉树的深度

思路:利用递归class Solution {public: int maxDepth(TreeNode* root) { if(!root) return 0; int left = maxDepth(root->left); int right = maxDepth(root->right); return max(left,right)+1; // +1是因为root }};...

2021-07-11 22:27:41 32

原创 剑指 Offer 54. 二叉搜索树的第k大节点

方法:利用递归先右节点 在中间节点 最后左节点class Solution { int res = 0; void find(TreeNode * root, int k, int &count) { if(!root) return; find(root->right, k, count); count++; if(count == k) { res =

2021-07-11 21:58:32 28

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字

方法一:直接遍历class Solution {public: int missingNumber(vector<int>& nums) { int size = nums.size(); for(int i = 0; i < size; i++) { if(nums[i]!=i) return i; } return size; }};方法二:利用

2021-07-11 21:20:58 29

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I

注意:在有序数组中的查找采用二分法,要敏感方法一:遍历数组,统计target出现的次数class Solution {public: int search(vector<int>& nums, int target) { int size = nums.size(); int res = 0; for(int i = 0; i < size; i++) { if(nums[i

2021-07-11 20:55:07 34

原创 剑指 Offer 52. 两个链表的第一个公共节点

思路比较巧妙:我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。这样,当它们相遇时,所指向的结点就是第一个公共结点。两个链表长度分别为L1+C、L2+C, C为公共部分的长度,按照楼主的做法: 第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L

2021-07-11 09:31:27 29

原创 剑指 Offer 50. 第一个只出现一次的字符

方法一: 利用map 并两次遍历字符串class Solution {public: char firstUniqChar(string s) { int lenght = s.length(); if(lenght == 0) return ' '; unordered_map<char, int> smap; for(int i = 0; i < lenght; i++) {

2021-07-11 09:17:10 37

原创 剑指 Offer 48. 最长不含重复字符的子字符串

方法一:采用滑动窗 并采用标志位 确定是否将右边窗右移class Solution {public: int lengthOfLongestSubstring(string s) { int left = 0, right = 0; int len = s.length(); if(len <= 1) return len; int max = 1; for(int i = 1; i <

2021-07-05 23:32:05 41

原创 剑指 Offer 47. 礼物的最大价值

思路:动态规划注意:边界值的初始化,左边界和上边界边界值也是累加得到class Solution {public: int maxValue(vector<vector<int>>& grid) { int hang = grid.size(); int lie = grid[0].size(); vector<vector<int>> dp( hang, vector<

2021-07-05 22:36:17 32

原创 剑指 Offer 46. 把数字翻译成字符串

思路动态规划: 首先联想到青蛙跳阶梯问题,可以一次跳两节,也可以一次跳一节。在本题中,可以一次翻译一个字符 可以一次翻译两个字符。 但是,当翻译两个字符时,会存在00 01 02 。。。09 以及>25的情况,此时,一次翻译两个字符就有问题,因此要分情况讨论。建立状态转换方程:class Solution {public: int translateNum(int num) { string s = to_string(num);

2021-07-04 22:59:15 58 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除