• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






Sunshineboy1

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

07 2020 档案

 
算法和数据面试重点
摘要:很多算法都是可以用递归和循环两种方式实现 排序和查找:二分查找、归并排序、快速排序 二维数组:回溯法(装载问题、背包问题、旅行、迷宫。。。。) 最优解问题:动态规划(一个问题可以分为多个子问题,而子问题中又存在更多重叠的小问题) 贪婪算法 特殊算法:位运算:与、或、异或、左移、右移 阅读全文
posted @ 2020-07-29 21:37 Sunshineboy1 阅读(87) 评论(0) 推荐(0)
二叉树知识点总结
摘要:二叉树:二叉树汇中每一个节点最多只能有两个子节点 二叉树有三种遍历方式: 前序遍历:先访问根节点-》左子节点-》右子节点 中序遍历:左子节点-》根节点-》右子节点 后序遍历:左子节点-》右子节点-》根节点 树的遍历有两类: 深度优先遍历: 先根遍历:包括前、中、后序遍历(先访问树的根节点) 后根遍历 阅读全文
posted @ 2020-07-29 21:29 Sunshineboy1 阅读(198) 评论(0) 推荐(0)
leetcode-17-电话号码的字母组合
摘要:思路: 每个数字对应的三个或者四个字母,输入的digits可能是几位数字组成 1.for(auto u:digits) 遍历digits中的数字,获取每一个单独的数字码 2. for(auto c:chars[ ]) 根据数字码遍历得到对应的字母 3. for(auto s:state) 对字母进行 阅读全文
posted @ 2020-07-29 11:05 Sunshineboy1 阅读(133) 评论(0) 推荐(0)
leetcode-236-二叉树公共祖先
摘要:思路: 公共祖先需要分为三种情况: 1.pq包含在root的左右子树中,则root就是他们公共祖先 2.pq包含在root的右子树中,则公共祖先是右子树 3.pq包含在root的左子树中,则公共祖先在左子树 代码: /** * Definition for a binary tree node. * 阅读全文
posted @ 2020-07-28 15:37 Sunshineboy1 阅读(80) 评论(0) 推荐(0)
leetcode-102-二叉树的层序遍历
摘要:思路: 按照层遍历,想到用queue 将root和左右子树节点放入queue 中,root 放入第一层容器,左右子树放入第二层容器 继续遍历子树,直到左右子树都未null 代码: 1 /** 2 * Definition for a binary tree node. 3 * struct Tree 阅读全文
posted @ 2020-07-28 14:59 Sunshineboy1 阅读(181) 评论(0) 推荐(0)
leetcode-105-从前序与中序遍历序列构造二叉树
摘要:思路: preorder 的第一个数就是root inorder 中root值前后分别是左子树和右子树 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tr 阅读全文
posted @ 2020-07-28 14:29 Sunshineboy1 阅读(111) 评论(0) 推荐(0)
leetcode-94-二叉树的中序遍历
摘要:思路: 中序:左->根->右 1.需要一个建立一个栈,首先将左子树放入栈中 2.获取栈顶元素并进行节点判断是否有右子树 3. 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode  阅读全文
posted @ 2020-07-27 18:45 Sunshineboy1 阅读(68) 评论(0) 推荐(0)
leetcode-98-验证二叉搜索树
摘要:思路: 1.使用DFS遍历整颗树 2.二叉树的根节点的范围为INT_MIN,INT_MAX. 3.对于当前节点判断是否合法,合法条件:先遍历左子树的最大值是否小于当前节点的值,在遍历右子树,右子树的最小值是否大于当前节点的值 注意: 根节点的边界为 INT_MIN,INT_MAX 左子树的范围:lo 阅读全文
posted @ 2020-07-27 10:46 Sunshineboy1 阅读(74) 评论(0) 推荐(0)
leescode-160-相交链表
摘要:思路: 1.两个链表都是单链表,所以不存在环的情况 2.将两个链表的头分别开始遍历,一个链表遍历完后又遍历另一个链表,如果有相交,两次遍历必然会得到相交节点。 代码: /** * Definition for singly-linked list. * struct ListNode { * int 阅读全文
posted @ 2020-07-26 14:55 Sunshineboy1 阅读(98) 评论(0) 推荐(0)
剑指offer-二维数组中的查找
摘要:思路: 1.分析二维数组特点为每行每列都是递增元素 2.从对角找到规律为只要最右边上角的元素大于target,横坐标-1,否则纵坐标-1,若没有找到false 代码: class Solution {public: bool searchArray(vector<vector<int>> array 阅读全文
posted @ 2020-07-26 08:58 Sunshineboy1 阅读(70) 评论(0) 推荐(0)
leetcode-5-longest palindromic substring
摘要:思路: 将长字符串分为奇数和偶数来处理 若为奇数-利用双指针从中间往两边移动,最后 截取对应片段对比放入res 中(偶数指针起始位置不同) 代码: class Solution { public: string longestPalindrome(string s) { string res; fo 阅读全文
posted @ 2020-07-21 10:24 Sunshineboy1 阅读(80) 评论(0) 推荐(0)
leetcode-929-unique email addresses
摘要:思路: 将邮件分为两个部分,@之前为本地地址,@之后为域名,需要对本地地址进行判断操作 1.建一个hash表用于存放邮件 2.找到@所在位置 email.find('@') 3.遍历本地名称,对“+”“.”进行处理 4.将处理后的本地name 和域名组合输入到hash 表中 代码: class So 阅读全文
posted @ 2020-07-21 09:53 Sunshineboy1 阅读(108) 评论(0) 推荐(0)
leetcode-165-compare version numbers
摘要:思路: 1.将两个版本中的小数点全部去掉 2.将字符串类型转换为整型 3.比较两个数大小 代码: class Solution { public: int compareVersion(string version1, string version2) { int i=0,j=0; while(i< 阅读全文
posted @ 2020-07-21 09:14 Sunshineboy1 阅读(111) 评论(0) 推荐(0)
leetcode-151-reverse word in a string
摘要:思路: 1.对空格进行消除处理(有些地方存在空格很多的情况) 2.对每一个字符串进行翻转 reverse( ) 3.将字符串叠加到K上,最终k个字符串组成一个字符串组 4.删除多余的空字符erase(s.begin()+k,s.begin()) 5.在翻转一次 代码: class Solution  阅读全文
posted @ 2020-07-20 21:34 Sunshineboy1 阅读(130) 评论(0) 推荐(0)
leetcode-49-group anagrams
摘要:思路: 1.创建一个undered_map的hash表 2.将字符串数组进行遍历 3.将每一字符串中的元素进行排序 4.排序后按照关键字筛选放入hash表中 代码: class Solution { public: vector<vector<string>> groupAnagrams(vecto 阅读全文
posted @ 2020-07-20 20:22 Sunshineboy1 阅读(146) 评论(0) 推荐(0)
leetcode-38-count and say
摘要:思路: 1.每一行字符串的规律就是对上一行的读取解释(下一行=上一行中 连续相同元素个数+元素值) 2.生成对应行数 3.遍历行中字符串 4.用k记录字符个数 5.将读取数据放入new string ns 中(ns +=to_string(k-j)+s[j]) 代码: class Solution  阅读全文
posted @ 2020-07-20 16:12 Sunshineboy1 阅读(109) 评论(0) 推荐(0)
leetcode-67-add binary
摘要:思路: 1.判断两个字符串长度,若不等长就在字符串前补0 2.字符串对应位置相加,(注意相加是要减一个“0”) 3.判断相加后是否大于2,若大于向前一位进1 4.当运行到首位时,需判断是否大于2,若大于2,直接将“1”加入到字符串头位置 代码: class Solution { public: st 阅读全文
posted @ 2020-07-20 15:35 Sunshineboy1 阅读(85) 评论(0) 推荐(0)
leedcode-125-valid palindrome
摘要:思路: 首先判断是否为字母或者数字,不是则去掉,然后再判断前后部分是否相同。 记一笔从大佬那里copy的函数islower(char c) 是否为小写字母isupper(char c) 是否为大写字母isdigit(char c) 是否为数字isalpha(char c) 是否为字母isalnum( 阅读全文
posted @ 2020-07-20 09:56 Sunshineboy1 阅读(86) 评论(0) 推荐(0)
leedcode-28-implement strstr()
摘要:思路: 暴力匹配法 1.遍历haystack 2.循环判断haystack[j]== needle[k] 3.输出return i (而不是return j 因为i是发现haystack[j]== needle[k]的首位置,j是匹配后最后一个位置) 代码: class Solution { pub 阅读全文
posted @ 2020-07-18 10:55 Sunshineboy1 阅读(80) 评论(0) 推荐(0)
leetcode-33-count and say
摘要:思路: 1. 1 2. 11 3. 21 4. 1211 5. 111221 6. 312211 7. 13112221 规律是下面一行在读取上一行数字 给一个数,这个数是1 描述上一步的数,这个数是 1 即一个1,故写作11 描述上一步的数,这个数是11即两个1,故写作21 描述上一步的数,这个数 阅读全文
posted @ 2020-07-17 16:55 Sunshineboy1 阅读(107) 评论(0) 推荐(0)
leetcode-206-Reverse Linked List
摘要:思路: 1->2->3->4->5 要实现翻转 1、让a=head,b=head->next, 2、翻转 auto c=b->next b->next=a a=b b=c 3.直到head->next=null 4.返回a 代码: /** * Definition for singly-linked 阅读全文
posted @ 2020-07-16 16:34 Sunshineboy1 阅读(72) 评论(0) 推荐(0)
leetcode-24-Swap Nodes in Pairs
摘要:思路: 1、由于head 节点可能产生变化,所以创建一个虚拟的头指针 dummy 2.p=dummy,a=p->next,b=p->next->next 3.交换 p->next=b; a->next=b->next; b->next=a; p=a; 代码: /** * Definition for 阅读全文
posted @ 2020-07-16 14:52 Sunshineboy1 阅读(118) 评论(0) 推荐(0)
leetcode-61-Remove Nth Node From End of List
摘要:思路: 先让first指针移动n个节点,只要first->next!=null first&second 同时移动,知道first->next==null 让second->next=second->next->next,就实现删除节点操作 代码: /** * Definition for sing 阅读全文
posted @ 2020-07-16 14:32 Sunshineboy1 阅读(98) 评论(0) 推荐(0)
leetcode-61-remove rotate list
摘要:思路: 双指针法 1、判断链表是否为null 2.获取链表长度--遍历链表 3.向然first指针移动K个位置 4.只要first->next!=null 让second &first指针同时移动,直到first->next==null 5.将链表首尾相连--first->next=head 得到新 阅读全文
posted @ 2020-07-16 14:15 Sunshineboy1 阅读(83) 评论(0) 推荐(0)
leetcode-82-remove duplicates from sorted list
摘要:思路: 1、将链表中head指针移动进行元素的删除,总共有两种情况 a.head->next->val==head->val 直接将head->next 移动到head->next->next 查找出所有相同的元素的区段 b.head->next->val !=head->val 将head 移动到 阅读全文
posted @ 2020-07-16 11:21 Sunshineboy1 阅读(89) 评论(0) 推荐(0)
leetcode-83-remove duplicates from sorted list
摘要:思路: 1.判断链表中元素 2.利用双指针遍历链表 3.如果链表中存在pre->val==crur->val >判断cur->next==NULL, prev->next==NULL >cur->next!=NULL prev->next=cur->next 4.如果链表中不存在pre->val== 阅读全文
posted @ 2020-07-14 21:35 Sunshineboy1 阅读(67) 评论(0) 推荐(0)
leetcode-86-partition list
摘要:思路: 1.创建两个空链表 2.遍历原始链表 3.将大于x的node中的val放入到maxlist,将小于node的放入到minlist中 4.将两个链表拼接在一起 /** * Definition for singly-linked list. * struct ListNode { * int  阅读全文
posted @ 2020-07-14 20:11 Sunshineboy1 阅读(109) 评论(0) 推荐(0)
leetcode-92-reverse linked list||
摘要:思路: 1.创建新链表读取不需要反转的node prev=prev->next 2.指针到达反转位置后对该区域进行直接反转 for(int i=m;i<n;i++) { prev->next=cur->next; cur->next=head2->next; head2->next=cur; cur 阅读全文
posted @ 2020-07-14 19:27 Sunshineboy1 阅读(125) 评论(0) 推荐(0)
listnode-2-two sum
摘要:思路: 方法一: 1、创建一个新链表用于存放结果 listnode* head=new listnode(-1) 2、需要对进位进行判断 bool carry=false 3、对两个链表是否为空进行判断 4、只要有一个链表不为空,直接对应指针的val相加 5、判断是否有进位,carry=sum>=1 阅读全文
posted @ 2020-07-13 20:02 Sunshineboy1 阅读(210) 评论(0) 推荐(0)
leetcode-31-next permutation
摘要:解题思路: 为了实现找到一个更大的排列 1、首先i从数组end位置向start位置遍历 找到nums[i]>nums[I-1] 跳出循环 2、如果i==0,还没有跳出循环,说明数组本身是按照降序排序,此时应该输出升序,(升序可以使用双指针法完成) 3、如果在i!=0时能够找到nums[i]>nums 阅读全文
posted @ 2020-07-13 15:02 Sunshineboy1 阅读(95) 评论(0) 推荐(0)
双指针法
摘要:解题思路1、指针初始化2、start指针和end指针同时指向首位数3、判断数组中的元素个数4、end指针移动,计算移动后sum5、判断sum是否大于s,如果大于输出ans,同时start指针移动到下一位,6、遍历完成后输出结果 代码 class Solution {public: int minSu 阅读全文
posted @ 2020-07-13 12:23 Sunshineboy1 阅读(101) 评论(0) 推荐(0)