自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 鸡蛋掉落

鸡蛋掉落第一思路是二分的话就是错的思路,网上大佬一句话说的很对,这就是多个鸡蛋能测的最大楼层,class Solution {public: //第一感觉是二分的你就感觉错了, //在网上看了一下,有个说的很有道理,这道题就是n个鸡蛋最多可以测多少层? // dp[i][j] = dp[i][j-1]+dp[i-1][j]+1; // 上面这个式子代表的就是总的式子。int getConfirmFloor(int test_count, int egg_count)

2021-02-20 17:35:39 72

转载 面试基础语言c++

1.c++与c的区别c++是面向对象的语言,c是面向过程的语言。c++与c的动态管理内存的方法不一样,c++是new/delete,c是malloc/freec++有引用,c没有。c++具有封装,继承,多态的特性。2.如何让一个c++程序执行c的程序且不需要对函数进行名字重整extern "C";3.指针与引用的区别指针是一个实体需要分配内存空间,引用只是变量别名不需要分配空间。指针在定义是不一定需要初始化而且可更改,引用必须进行初始化且不能更改。引用的低层就是通过指针实现的。指

2021-02-19 17:38:46 169

原创 剑指offer 53~66

53 - I. 在排序数组中查找数字 Iclass Solution {public: int ans = 0; void countsum(vector<int>& nums, int left, int right, int& target){ if(left > right) return; int mid = left + (right - left)/2; if(nums[mid] == targ

2021-02-17 16:45:10 91

原创 剑指offer 39~52

39. 数组中出现次数超过一半的数字class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); return nums[(nums.size()-1)/2]; }};40. 最小的k个数class Solution {public: vector<int> getLeastNumbers(ve

2021-02-16 20:27:26 65

原创 剑指offer 27~38

27. 二叉树的镜像class Solution {public: //递归全自动 TreeNode* mirrorTree(TreeNode* root) { if(root==nullptr) return nullptr; TreeNode* temp = root->left; root->left = mirrorTree(root->right); root->right = mirrorTree(temp);

2021-02-16 14:18:31 62

原创 LeetCode :141. 环形链表

141. 环形链表思路:思维别僵化嘛,给你们看看那些脑路清奇的写法。1.测试处来最长的数据长度,然后就直接来减超过就是循环。class Solution {public: bool hasCycle(ListNode *head) { int cout=8029; while(head!=NULL && cout>0){ head=head->next; cout--; }

2021-01-30 15:15:48 83

原创 LeetCode:136. 只出现一次的数字

136. 只出现一次的数字思路:异或处理如果两个一样的异或完为其本身,若不相同则为其本身。技巧:accumulate(nums.begin(),nums.end(),0,bit_xor());里面accumulate为累加函数,bit_xor()为异或操作。class Solution {public: int singleNumber(vector<int>& nums) { return accumulate(nums.begin(),nums.end(

2021-01-30 13:03:10 92

原创 LeetCode :94. 二叉树的中序遍历

94. 二叉树的中序遍历思路:二叉树中序排序,递归写法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(n

2021-01-28 12:48:06 49

原创 LeetCode: 78. 子集

78. 子集思路:[1,2,3]->[]->[],[1]->[],[1],[2],[1,2]->[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],看出来了吗,每次都把原来的拉出来加上原数组的一个值,就完成了。class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector&l

2021-01-26 20:28:23 43

原创 LeetCode: 75. 颜色分类

75. 颜色分类思路:真的没看懂这题的要求有啥用,sort不是能完全解决吗???class Solution {public: void sortColors(vector<int>& nums) { sort(nums.begin(),nums.end()); }};

2021-01-26 18:25:10 58

原创 LeetCode:56. 合并区间

56. 合并区间思路:我感觉我好像在哪里写过这道题和dp的导弹射程问题好相似~…事实证明不是dp,用双指针来写还是比较简洁的,class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n=intervals.size(); vector<vector<int>> ans;

2021-01-26 18:17:56 44

原创 LeetCode 62. 不同路径

62. 不同路径思路:dp基础问题,只有两种走法,向下走和向右走,就可以推得一个思路,a[i][j] 的走法就是从a[i-1][j] ,a[i][j-1]两个方向走过来的,哎这就开始套娃了就要不断向上求解,还有个问题就是行矩阵和列矩阵的的走法是唯一的。class Solution {public: int uniquePaths(int m, int n) { int dp[n][m]; for(int i=0;i<n;++i){ for(int j

2021-01-26 14:07:26 42

原创 LeetCode:64. 最小路径和

64. 最小路径和思路:acm入门的dp系列题型思路,要求每一步最小达到整体最小的思路,dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grit[i][j]class Solution {public: int minPathSum(vector<vector<int>>& grid) { int row=grid.size(); int col=grid[0].size(); vector<vector&l

2021-01-26 13:14:41 66 1

原创 LeetCode: 70. 爬楼梯

70. 爬楼梯思路:这样想哈,首先一层1,二层2,三层3,这个三的得到方法就是上一层的方法然后多上两层,加上,上二层的方法在多上一层,哎然后有意思的来了这是一个数列啥名字我给忘了但是记得有这个数列,a[i]=a[i-1]+a[i-2]。。。。。这就可以直接强算了。。class Solution {public: int climbStairs(int n) { vector<int> dp; dp.push_back(1); dp.push

2021-01-25 22:29:34 66

原创 LeetCode: 55. 跳跃游戏

55. 跳跃游戏思路:很正宗的一道动态规划,但是我一下没思路,我觉的递归应该能过,先提交了,有问题的话我一会儿回来改递归:class Solution { bool emm(vector<int>& nums,int i){ if(nums[i]+i >= (nums.size()-1)) return true; for(int j=nums[i];j>0;j--){ if(emm(nums,j+i))

2021-01-25 16:24:57 53

原创 LeetCode: 49. 字母异位词分组

49. 字母异位词分组思路:题目要将相同字母的字符串分成一个类,现在问题是如何判断他是相同字母,然后就想到了一个很有意思的STL—map<a,b>,中间把字符排序尽可能保证其是同一个标准。后面在将map转vector。下面是map遍历的方法。。。https://blog.csdn.net/u010429424/article/details/75332700class Solution {public: vector<vector<string>> g

2021-01-25 15:44:36 71

原创 LeetCode: 53. 最大子序和

53. 最大子序和思路:这道题在我看来就是贪心,,然后就想着用递归写一下,然后就代码越写越多,越写越不对劲,,最后看了一下别人写的解题方法,,感觉自己想麻烦了。。。class Solution {public: int maxSubArray(vector<int>& nums) { int max=nums[0]; int sum=nums[0]; for(int i=1;i<nums.size();i++){ if(sum>

2021-01-24 20:20:26 45

原创 LeetCode: 48. 旋转图像

48. 旋转图像思路·:模拟数组的旋转。先转置在旋转比较简单。class Solution {public: void rotate(vector<vector<int>>& matrix) { int temp; int n =matrix.size(); for(int i=0;i<n;++i){ for(int j=i;j<n;++j){

2021-01-23 20:37:22 63

原创 LeetCode: 46. 全排列

46. 全排列思路:递归永远的神!!!!class Solution {public: void emm(vector<int>& nums,vector<vector<int>>& ans,vector<int> &tem,vector<int>& isIn,int len){ if(len==nums.size()) ans.push_back(tem); else{

2021-01-23 15:26:25 61

原创 LeetCode: 39. 组合总和

39. 组合总和思路:1.多个循环找出值相等的组合,我猜要超时。2.递归找出值相符合的组合,在vector<vector>里进行保存。中间的判断可以自由选择,选择加判断也可以选择减判断,这选择的是减判断。class Solution {public: void emm(vector<int> &candidates,vector<vector<int>> &ans,vector<int> &tem,int ta

2021-01-23 14:08:26 84 1

原创 LeetCode: 34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置思路:题目要求了log级别的时间复杂度,,,思路1,两个指针走两头这个直接无了,时间复杂度是n,思路2,二分查找在时间复杂度上是log,二分有两种写法,第一种是循环写,第二种是递归写,这里选择的是递归写。class Solution {public: void emm(vector<int> &nums,int left,int right,int target,int &a,int &b){ i

2021-01-22 20:46:07 63 1

原创 LeetCode:33. 搜索旋转排序数组

33. 搜索旋转排序数组思路:第一个想法是直接sort一下然后在二分查找,开始写的时候才发现这样写不对。第二个想法就是找到那个变化的位置,进行两个二分查找,直到找到那个值。嗯第二个方法超时了,,,第三个思路是第二个思路的改进版,可以把整个看为递增的模式,其实是由两端有序的数组组合在一起的,而且前面的大·,后面的小可以用二分法直接控制寻找。class Solution {public: int search(vector<int>& nums, int target) {

2021-01-22 15:33:58 36

原创 LeetCode: 31. 下一个排列

31. 下一个排列思路:下一个排序,就是要进行比较,从后向前找,找出第一个nums[i+1]>nums[i]中i的位置,若没找到就表明该nums是一个从大到小的排列,就可以进行对调,变成从小到大排。ex:5 4 3 2 1 -----> 1 2 3 4 5 以三为中心进行对调。class Solution {public: void nextPermutation(vector<int>& nums) { if(nums.size()&

2021-01-22 13:34:42 45

原创 LeetCode: 22. 括号生成

22. 括号生成思路:递归,先生成左端的括号,之后在生成右段的括号,合成一个完整的括号并加入数组中。class Solution {public: void backtrack(vector<string> &ans,string cur,int open,int close,int max) { if(cur.length() == max*2){ ans.push_back(cur); return;

2021-01-21 13:48:07 60

原创 LeetCode: 19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点思路:刚开始还想着用a.size()来获取链表长度,后面反应过来这不是数组,然后有来了一个大循环获得链表长度,然后减去尾部长度在循环一次,,,,,这是一个比较蠢的方法,,,哎就有了另一个方法,双指针来玩,A,B指针,A比B快n个距离,当A为空时,就可以用B确定了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *

2021-01-21 12:46:28 96

原创 LeetCode:21. 合并两个有序链表

21. 合并两个有序链表两个链表进行合并需要一个新的端点进行合并,逻辑简单,清晰。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(

2021-01-21 11:56:34 59

原创 LeetCode: 20. 有效的括号

20. 有效的括号数据结构的题,没啥新奇的想法,就是栈的运用:class Solution {public: bool isValid(string s) { stack<char> m_stack; for(char &c:s){ switch(c){ case'(':m_stack.push(c);break; case'[':m_stack.push(c);break;

2021-01-21 11:44:24 33

原创 LeetCode 14. 最长公共前缀

14. 最长公共前缀小记:strs[i].find(s)在里面找是否有相同的地方,substr切割函数。这是看的大佬的写法。。nb~class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.size()==0) return ""; string s=strs[0]; for(int i=0;i

2021-01-14 19:45:36 40

原创 LeetCode 13. 罗马数字转整数

13. 罗马数字转整数思路:暴力解决,里面有些规律在里面,比如当d[i]<d[i+1]这表明两个是叠加产生的,应该减去。class Solution {public: int romanToInt(string s) { vector<int>num(s.size()); //获取长度 for(int i=0;i<s.size();i++){ if (s[i] == 'I') num.push_bac

2021-01-14 19:00:21 42

原创 LeetCode 12. 整数转罗马数字

12. 整数转罗马数字思路:一一对应,建立数组就行。class Solution {public: string intToRoman(int num) { string str=""; int num1[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; string str1[13]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};

2021-01-14 18:41:39 54

原创 LeetCode 11. 盛最多水的容器

11. 盛最多水的容器思路:先别想这用排序,那样子得自己建立数据结构,暴力或者夹边。暴力必炸时间,建议夹边。class Solution {public: int maxArea(vector<int>& height) { if(height.size()<2) return 0; int maxarea=0; int left=0; int right=height.size()-1;

2021-01-14 18:08:15 46

原创 LeetCode -9 回文数

LeetCode -9 回文数小记:stringstream 为int转string的一个类型,推荐使用。reverse为字符串颠倒函数推荐使用。 bool isPalindrome(int x) { if(x<0) return false; else{ string res; stringstream ss; ss << x; ss >> res;

2021-01-13 17:14:51 58

原创 力扣-1

第一种方法暴力两次循环,判断是否相等如果相等则就返回,如果不相等就继续,但是重要的来了,他会超时。。。第二种方法map方法,一个map有两个数据域一个索引一个值域,用空间换时间。简单来说就是做减法,class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> m; vector

2020-11-09 23:22:10 73

原创 863. 二叉树中所有距离为 K 的结点

最开始的想法是写成一个二维数组,然后通过走几步到这样的写法来实现,最后发现他不是一个满秩矩阵,一些为null的地方在走dfs时会出错。在看了看后面的题解后惊为天人,那是什么大佬在里面畅游呀,,哪完美的解法,找不到一丝的瑕疵,在极短的时间里,却用消耗内存最底的方法写了出来。(删除这段)建立一个图。相邻节点的距离设置为1。graph[root->val][root->right...

2019-09-14 11:38:59 78

原创 872. 叶子相似的树

根据题中给出的顺序,可以看出是正序遍历所得到的值,则我们可以正序遍历得到另一个队值。在正序遍历时判断其子是否为空,如果为空则添加入队列,如果不为空则继续向下查找。最后对两个队列进行对比,如果相同则返回True,否则返回Flase。当然可以使用数组,但是数组会有一些麻烦。。所以选择简单的写法/void leaflist(vector<int> &leafAr...

2019-09-14 11:06:39 73

原创 Leetcode 120 Triangle 三角形最小路径和

dp问题,建议倒这寻找从最下面一层向上寻找。。dp[i][j] = min(dp[i+1][j],dp[i+1][j+1])+dp[i][j] 这是dp式,然后自行改动。。。。难点在他的输入方式中,用一般的二维数组,会出现一些问题,我自己没解决掉,在输入反面借鉴了一些别人的博客。 int minimumTotal(vector<...

2019-07-22 17:19:42 67

原创 LeetCode-1078.Bigram 分词-c++

大概率不用过脑子,,。。。只用判断i == first && i+1 ==second string a = i+2这个来判断代码List<String> res = new ArrayList<>(); String[] strings = text.split(" "); ...

2019-07-22 17:03:00 92

原创 LeetCode 824. 山羊拉丁文

1.没得算法,按照题目要求一步一步写下去就好了。。。首先将String类型的字符串变为,char数单词4之间组以空格相隔。在循环中先筛选出以元音字母开头的单词,按照题中的要求添加。以else选择辅音按照体中的要求改写。在代码中加入计数器,对单词数进行计算,并按体重要求进行添加。代码:。。。。。。。。。。。。。。。。。...

2019-07-22 16:31:16 85

原创 c,指针,函数

指针是指向地址的一个东西;而函数里的参数传入的只是一个副本;想在子函数里改动main里的值只能通过指针;在所有函数中你传入的只是一个副本,你在函数里面改动数据,对main()里的东西不影响;这个数据互换的例子:#include &lt;stdio.h&gt;void swap(int a,int b){    int temp=a;    a=b;    b=temp;...

2018-10-14 16:36:21 86

原创 最后一个单词的长度;

能找到这说明你已经读题了;坑点;1.句子后面有空格,2.这个句子是个单词;#include &lt;stdio.h&gt; #include &lt;string.h&gt;int main(){ char a[10000]; gets(a); int len=strlen(a); int i=len-1; if(len==0) { printf("...

2018-03-24 19:06:20 126

空空如也

空空如也

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

TA关注的人

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