自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用flex进行数字和字符辨别

lex文件分三部分:定义段,实现段和main函数段test.l:%{#include<stdio.h>int k=0,j=0;%}%%[0-9]+ {printf("Number: %s %d\n",yytext,yyleng); k++;}[a-zA-Z]+ {printf("Text: %s %d\n",yytext,yyleng); j++;}\n {return 0;} %%//must have yywrapint yywrap(){}int main

2021-03-25 20:11:13 558

原创 22. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效的:["((()))","(()())","(())()","()(())","()()()"]无效的:[")()()(",")())((","))(()(","))()((",")))((("]解题思路:backtracking(n,n):将具有n个左括号和n个有括号的有效的全排列字符串加入到Res中递归的退出条件:该放的都放完了递归将问题规模缩小,这种就是放一个左括号之后,我们放左括号的任务就

2021-03-20 16:08:01 68

原创 46. 全排列

解题思路:回溯backtracking函数的作用:将nums数组在使用情况为used数组时,即排除used数组中已经使用过的元素之后,剩下的元素进行全排列,并将这个全排列加入到path中,如果达到数量,则将其加入结果队列中。class Solution { vector<int> path; vector<vector<int>> res;public: vector<vector<int>> permute(vec

2021-03-20 15:13:05 77

原创 141. 环形链表

错误:循环退出点写错了:应该选择每次循环都改变的变量进行判断。循环中判断的条件位置写的不对,应该先让两个指针走两步,然后在判断/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bo

2021-03-17 22:46:49 60

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

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值解题思路:剑指offer上的三次翻转方式class Solution {public: string reverseLeftWords(stri

2021-03-16 23:22:04 69

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

题目:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。这个是我自己第二次做写的代码:其中Find的使用也不是自己想起来的,和使用c++11方式的遍历相比,这种方式的遍历代码上感觉好麻烦。1.最开始使用的是map,后来发现没有必要使用有序的结构。2.find 函数使用不够熟练3.循环的方式可以改进解题思路:使用哈希表,如果第一次出现在哈希表中,则将其值置为true,如果不是第一次出现,那么将其值置为false。题目中要求第一个出现,则可以对字符串中的

2021-03-16 23:07:18 102

原创 101. 对称二叉树

判断一棵树是不是对称二叉树解题思路:compare函数的作用是,判断两棵树是否对称。如果一个树的左右子树对称,那么这棵树是一个对称二叉树。判断方式:如果树1的左子树和树2的右子树对称,同时树1的右子树和树2的左子树对称,那么树1和树2对称/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

2021-03-12 23:32:42 67

原创 剑指 Offer 27. 二叉树的镜像

解题思路:递归的退出条件:当当前节点为空时退出单层的思路:1.将root的左右子树交换位置2.将左子树的左右子树交换位置3.将右子树的左右子树交换位置/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), righ

2021-03-12 23:02:15 58

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

统计一个数字在排序数组中出现的次数。解题思路:利用二分查找:(感觉自己能写出二分查找了,嘻嘻)错误点;if(mid+1<n&&nums[mid+1]!=target||mid==n-1){这个或条件没写出来,两种情况可以直接返回:1.如果当前元素的下一个元素的值不等于Target,那么说明当前元素为后边界2.如果当前元素为最后一个元素,那么当前元素为后边界。class Solution {public: int search(vector<int&gt

2021-03-11 23:58:08 62

原创 剑指 Offer 40. 最小的k个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。解题思路:借助快排partition函数 (这次partiton函数没有写错,嘻嘻)错误点:没有写这一行,如果不写当nk时会溢出,if(nk) return arr;这个地方竟然忘记写pos了,pos = partition(arr,beg,end);class Solution {public: vector<int> getLeas

2021-03-11 23:20:39 68

原创 169. 多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。这种方式超时了,但是使用partition函数的思路可以借鉴:由于多数元素一定出现在数组的中间位置,那么使用快排的partition函数能够帮助定位。解题思路:partition函数的作用是:int partition(vector<int>& nums,int beg,int end)对于给定的nums,开始和结

2021-03-10 23:23:01 71

原创 快速排序

错误点:nums[j]>=pivot 这里需要等于号if(i<j) 这个条件判断忘记了class Solution {public: vector<int> sortArray(vector<int>& nums) { int n = nums.size(); if(n==0) return nums; Qsort(nums,0,n-1); return nums; }

2021-03-10 10:40:55 86

原创 归并排序

思路:将数组左边排序,将数组右边排序,然后将有序的左右两边数组合并。错误点:if(beg>=end) return; 这里要写成大于等于,不能是大于,因为当区间内部只有一个元素时,也不许要进行比较了。最后这里将tmp数组重新复制给nums数组时,注意下标,因为tmp数组的索引总是从0开始的,因此这里需要注意。for(int i=0;i<end-beg+1;i++){nums[i+beg] = tmp[i];}class Solution {public: vecto

2021-03-10 10:13:19 68

原创 122. 买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。解题思路:动态规划,dp[i][0]代表第i天结束后,不持有股票时能够拥有的最大现金数量。dp[i][1]代表第i天结束后,持有股票时能够拥有的最大现金数量。在第0天开始时,不持有股票,现金数量为0.对于dp[i][0]的递推公式:如果第i天结束后不持有股票,有两种可能:(1)第

2021-03-06 11:17:52 91

原创 121. 买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。解题思路:dp数组dp[i]的意义是在第i天能够获得的最大收益,递推公式: dp[i] = max(dp[i-1],prices[i]-min);维护一个min,截止到第i天所看到的最小值就可以啦 还

2021-03-05 22:25:09 70

原创 华为机试 图片整理

题目描述Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。本题含有多组样例输入。利用Sort 函数对string进行排序即可,我竟然忘记Sort应该包含algorithm了#include<string>#include<iostream>#include<algorithm>using namespace std;int main(){ st

2021-03-02 00:19:40 187

原创 华为机试 字符个数统计

题目描述编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。解题思路:利用set就ok#include<set>#include<iostream>using namespace std;int main(){ string str; cin>>str;

2021-03-02 00:14:45 118

原创 华为机试 合并表记录

题目描述数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。解题思路:利用哈希表错误点:对以下这种语法不熟悉,Begin 和end后面有括号 而first 和 second后面没有for(auto it=m.begin();it!=m.end();it++){cout<<it->first<<’ '<<it->second<<endl;}#i

2021-03-02 00:09:32 176

原创 华为机试 质数因子

题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格解题思路:求质因子连乘积,从2开始,将被除数的的因子除尽,那么得到的就是质因子。错误点:if(n>1) cout<<n<<’ ';这一行没有写,因为随着n的减小,外层循环逐渐满足不了,最后一个因子需要这种方式打出来(虽然我也没搞懂为啥)如果把循环终止条件改为//for(int i=2;i<=n;i++){,会超

2021-03-01 23:58:38 236

原创 华为机试 进制转换

题目描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。解题思路:遍历进行处理#include<iostream>#include<cmath>using namespace std;int main(){ string str; while(cin>>str){ int n=str.size(); int res = 0; for(int i=2;i<n;i++){

2021-03-01 23:34:13 169

原创 华为机试 求最小公倍数

阶梯思路:辗转相除法,求最大公约数,最小公倍数等于两树之积除以最大公约数#include<iostream>using namespace std;int main(){ int a,b; cin>>a>>b; int c = a>b?a:b; int d = a>b?b:a; while(d!=0){ int tmp = d; d = c%d; c = tmp;

2021-03-01 19:52:50 130

原创 华为机试 放苹果

题目描述把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。数据范围:0<=m<=10,1<=n<=10。本题含有多组样例输入。解题思路:动态规划,两种情况:1.如果有空盘子,那么,相当于缩减为m个苹果放在n-1个盘子里的问题2.如果没有空盘子,那么必须保证每个盘子都有一个苹果,那么相当于缩减为m-n个苹果放在n个盘子的问题遇到的问题:1.这个i-j>=0没写出来,如果苹果数量小于

2021-03-01 19:49:47 387

原创 华为机试 走方格的方案数

题目描述请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。本题含有多组样例输入。解题思路:动态规划错误点:这个n和m的初始化写反了, vector< vector > dp(m+1,vector(n+1,0)); 导致当输入值不是正方形时会产生访问越界#include<iostream>#include<vector>using na

2021-03-01 19:49:22 417

原创 华为机试 密码强度等级

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。一、密码长度:5 分: 小于等于4 个字符10 分: 5 到7 字符25 分: 大于等于8 个字符二、字母:0 分: 没有字母10 分: 全都是小(大)写字母20 分: 大小写混合字母三、数字:0 分: 没有数字10 分: 1 个数字20 分: 大于1 个数字四、符号:0 分: 没有符号10 分: 1 个符号25 分: 大于1 个符号五、奖励:2 分: 字母和数字3 分: 字母、数字和符号5 分: 大小写

2021-03-01 17:05:11 554 3

原创 华为机试 参数解析

题目描述在命令行输入如下命令:xcopy /s c:\ d:\,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:参数4: 字符串d:请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\progra

2021-03-01 15:32:50 367

原创 494. 目标和

给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。解题思路;dfs(如果不看答案我肯定想不到使用dfs)dfs作用://nums数组,从位置pos开始(当前位置还没有计入到当前和中,也即如果pos=nums.size()-1那么这个dfs本层仍然不能返回,需要将当前位置值加入到当前和中),当前和为curSum,目标和为t

2021-03-01 11:22:55 74

空空如也

空空如也

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

TA关注的人

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