摘要: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 分析:滑动窗口法,用一个map记录每个字符出现的位置索引,当该字符之前出现过且在当前窗口内,则窗口左端点要右移到该位置。 class Solution { public: int lengthOfLongestSubst 阅读全文
posted @ 2020-04-09 18:00 betaa 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 分析:归并排序,在归并的时候多加一行代码统计逆序对即可 class Solution { public: vector<int> a, t; int cnt = 0; voi 阅读全文
posted @ 2020-04-09 17:53 betaa 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 分析:约瑟夫环问题,可以用循环链 阅读全文
posted @ 2020-04-09 17:38 betaa 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。 题解:使用位运算 计算不进位的和 sum = a ^ b; 计算进位carry = a & b << 1; 重复上两步a = sum; b = carry; class Solution { publ 阅读全文
posted @ 2020-04-09 17:29 betaa 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 1. 二叉搜索树的最近公共祖先 判断当前节点的值和两节点的值的大小即可确定$LCA(p, q)$的位置: 如果p q的值都小于当前节点的值,则递归进入当前节点的左子树;如果p q的值都大于当前节点的值,则递归进入当前节点的右子树;如果当前节点的值在p q两个节点的值的中间,那么这两个节点的最近公共祖 阅读全文
posted @ 2020-04-09 17:06 betaa 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 注意各种特殊情况 class Solution { public: int strToInt(string s) { int res = 0; int i = 0; int flag = 1; // 检查空格 while (s[i] == ' ') i++; // 检查符号 if (s[i] == 阅读全文
posted @ 2020-04-09 16:58 betaa 阅读(162) 评论(1) 推荐(0) 编辑