05 2019 档案
摘要:最优解O(log(min(m,n))) 方法二:合并有序数组 O(log(m+n+1)/2) 附上二分法的分析过程: 总结一下: 1. m1<=0时,c1=nums2[m2-1],在4不成立时,c2=min(nums1[m1],nums2[m2]); 2. m2<=0时,c1=nums1[m1-1]
阅读全文
摘要:class Solution { public: int getSum(int a, int b) { long long carry=b; while(b!=0){ carry=a&b; a=a^b; b=(carry&0xffffffff)<<1; } ...
阅读全文
摘要:手动排除特殊情况; 对于一般情况,使用位运算和加减法来计算除法,使用sign记录结果符号;(这部分为leetcode 29题的答案) 使用hashmap来记录循环体出现的开始位置(如果有的话),使用flag记录有无循环体出现;
阅读全文
摘要:我理解本题是考察基于加减实现除法,代码如下: 如果单纯基于位运算呢?加减也依靠位运算如何避免溢出? 以下为不使用“+ - * / ”四个符号完成计算:
阅读全文
摘要:https://blog.csdn.net/mengzhengjie/article/details/80611422 leetcode 总结 位运算小结(按位与、按位或、按位异或、取反、左移、右移) 位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某
阅读全文
摘要:1)位运算加法: int a=3,b=4; while(b!=0){ num=a^b; carry=a&b<<; a=num,b=carry; } 最终a为结果 举个例子: 对于两数二进制相加,不进位相加相当于异或num,指考虑进位计算为与,并左移一位carry;当carry不为0时表示有进位,将进
阅读全文
摘要:在<istream>中的getline函数有两种重载形式: istream& getline (char* s, streamsize n );istream& getline (char* s, streamsize n, char delim ); stringstream s="1,2,3,4
阅读全文
摘要:to_string函数主要进行以下一些参数转换为string stringstream,位于<sstream>库中 https://blog.csdn.net/jllongbell/article/details/79092891 <sstream>库定义了三种类:istringstream、ost
阅读全文
摘要:OSI在传输层与应用层中间多了两层(会话层(session)和表示层(presentation)) 从上到下三个面板分别如下:
阅读全文
摘要:主要记录几个命令: 1)traceroute,现代Linux系统称为tracepath,Windows系统称为tracert,是一种计算机网络工具。它可显示数据包在IP网络经过的路由器的IP地址。 原理 程序是利用增加存活时间(TTL)值来实现其功能的。每当数据包经过一个路由器,其存活时间就会减1。
阅读全文
摘要:/** 可看做26进制到10进制转换问题:v=26*v+s[i]-'A'; **/ class Solution { public: int titleToNumber(string s) { int v=0; for(char a:s){ v=26*v-'A'+a+1; } return v;...
阅读全文
摘要:to_string(x) 将数字x转化为string atoi(x) 将char转化为int stoi(x) 将string 转化为int 采用中序遍历的顺序存储,NULL用#表示,以,分隔,O(n)time O(n) space 采用层序遍历的顺序,储存每一层的值,不存在的或者NULL值用#代替,
阅读全文
摘要:/** 验证一般情况(元素数目大于等于3)有几个情况分析:两个特殊情况: 6 5 4 3 2 1 完全反序,这种序列没有下一个排序,因此重新排序1 2 3 4 5 6 1 2 3 4 5 6 完全升序,很容易看出翻转5 6得到下一个排序; 因此对于以下一般情况有: 1 2 6 5 4 3 找到右边第一个a[i]& nums) { int len=nums.size(); ...
阅读全文
摘要:暴力解法:O(n) 想办法用二分查找Ologn
阅读全文
摘要:class Solution { public: static bool cmp(vector a,vector b){ return a[0]> merge(vector>& intervals) { vector> res; sort(intervals.begin(),intervals.end(),cmp);...
阅读全文
摘要:class Solution { public: vector searchRange(vector& nums, int target) { vector res(2,-1); int left=0;int right=nums.size()-1; if(right<0) return res; if(right==0)...
阅读全文
摘要:通过hash map遍历一遍存储出现的次数,通过小顶堆存储k个元素
阅读全文
摘要:https://www.cnblogs.com/fzuljz/p/6171963.html
阅读全文
摘要:两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至O(n)time O(n) space 关于计数排序:https://mp.weixin.qq.com/s/WGqndkwLlzyVOHOdGK7X4Q 使用3个变量一趟扫描O(1) space O(n) time 具体实现过程参见:ht
阅读全文
摘要:O(m+n)time O(1)space算法:
阅读全文
摘要://经过剪枝的全排列解算, /**** 1)左右括号都必须为n,即left<n,right<n; 2)必须先放置左括号才能放置右括号,即限制条件有left>right; ****/ 其中left,right分别为i,j DFS+剪枝:
阅读全文
摘要:与子集70?类似,子集每次两个分支,本题每次k个分支,子集是第一次不push第二次push元素,本题是每次都push元素,因此,本题答案的长度都为k,子集题目为各种组合;
阅读全文
摘要:采用回溯法:对于例子图解执行过程如下,其中向上的分支为向下递归,向下的分支为第二次递归,因此已经push了对应的下标的值,则从根到右边连起来的路径即为组合 由于整个过程类似于二叉树的中序遍历,因此代码形式也类似于中序遍历的递归代码,i也可以代表当前所在的层数,当到达第3层时输出结果;
阅读全文
摘要:方法一:直接使用复制的数据递归:O(n)时间,O(n)空间,不计算递归栈空间; 方法二:time O(n) space O(1)
阅读全文
摘要:time O(n) ,sapce O(n)
阅读全文
摘要:通过stack进行中序遍历迭代,timeO(k),spaceO(1) 改进的话则建立一个private vector<int> arr,当k<arr.size()的时候第k大的元素已经存在,当k>arr.size()时不存在,需要继续执行搜索;或者先全部遍历一遍存储到arr中,然后再查找;
阅读全文
摘要:暴力解法当然可以遍历两个链表,不过time O(mn) space O(1)暂且不说, 方法一:双指针, time O(m+n),space O(1) 可以对比判断环形链表的快慢指针法。 这种方法构思十分十分十分巧妙,假设有两个链表,链表A: 1 2 3 * # 和链表B: a b c d e *
阅读全文
摘要:leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数组和字符串: leetcode 15 三数之和(medium)排序+双指针 leetcode73 矩
阅读全文
摘要:由低位加到高位一般比较方便,考虑进位问题(通过引入flag和最后的if表达式),两树长度不相等的情况(通过引入三个while循环) 需要变量:pre,cur两个链表节点,记录头结点之前的节点a=new ListNode(-1)
阅读全文
摘要:使用哈希的方法:先将nums哈希表化,再遍历nums,寻找-nums[i]如果存在则为题目所求
阅读全文
摘要:O(n)time,O(n)space
阅读全文
摘要:容器unordered_map<key type,value tyep>m; 迭代器unordered_map<key type,value tyep>::iterator it; erase函数: 关于erase 函数,可以删除一个iterator位置的元素(1),可以删除从first迭代器到la
阅读全文
摘要:转载自https://blog.csdn.net/qjh5606/article/details/85881680 list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。 函数有以下三种声明: 一:void splice ( iterator p
阅读全文
摘要:方法一:使用快排: 方法二:使用并查集如题所说达到O(n) 方法三:使用哈希表O(n) 别人家的哈希表: 别人家的使用hashset 和 hashtable: hashset: hashtable: 哈希set 有道词典 solution 1: has ... 详细X 解决方案1:哈希表(关键,le
阅读全文
摘要:方法一:染色法 类似于岛屿的个数也可以用染色法:通过深度优先搜索来做 使用一个数组来表示当前朋友a是否已经包含到已经遍历的朋友圈中,遍历所有的朋友,如果当前朋友没有在已经访问的朋友圈中,即visited==false,那么cnt++;并将该朋友所有相关的朋友使用dfs全部标记为visited=tru
阅读全文
摘要:主要考察图搜索: 方法一:染色法,时间O(mn) 遍历一遍,再通过BFS或DFS将所有临近岛屿染色,使用dfs时将numIslands中的bfs换成dfs即可; 第二种:并查集的方法,
阅读全文
摘要:/***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数; 状态转移: for i:[0,m] for j:[0,n] if(word1[i-1]==word2[j-1]) DP[i]
阅读全文
摘要:动态规划:O(n*amount)时间复杂度,O(amount)空间复杂度,可以类比为coins[j] step上楼梯,最终为上到amont
阅读全文
摘要:动态规划new version: 动态规划:O(n^2) 80ms 二分查找:O(nlog(n))8ms 一个例子为:因为LIS是一个递增序列,因此可以用二分查找来得到结果
阅读全文
摘要:转载自 https://www.cnblogs.com/Tang-tangt/p/9291018.html 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。 up
阅读全文
摘要:这道题最初刷题连答案都看不懂,实在不是一道容易的题目。 补充两个C++知识: 1)string对象的.c_str() 返回一个c语言字符串指针 即const char* p类型的指针; 2)c语言字符串的末尾为‘\0’可以用 *p==0 判断是否到达末尾。 递归解法不断的对当前情况和之后的情况进行判
阅读全文
摘要:继承leetcode123以及leetcode309的思路,,但应该也可以写成leetcode 152. 乘积最大子序列的形式
阅读全文
摘要:/***** //sell[i]表示截至第i天,最后一个操作是卖时的最大收益; //buy[i]表示截至第i天,最后一个操作是买时的最大收益; //cool[i]表示截至第i天,最后一个操作是冷冻期时的最大收益; //递推公式: //sell[i] = max(buy[i-1]+prices[i], sell[i-1]) (第一项表示第i天卖出,第二项表示第i天冷冻) //buy[i] =...
阅读全文
摘要:使用动态规划的解法,空间复杂度O(2*2)如果交易k次则为O(2*k),时间复杂度O(2n),交易k次为O(n*k), 因此本题实际上可以退化为买卖一次的情况:去掉buy2和sell2,即leetcode121; 以及进化为买卖k次的情况,即状态变量增加为k个buy和sell,即leetcode18
阅读全文
摘要:参见 本题采用了第一列初始化后,从左侧向右开始递推的方式,但从上往下递推应该也成立,以后尝试一下 想写一个普适性的适用于n天交易k次持有j股的状态方程但是有问题;对于交易次数过多的情况数组会超出界限: 测试数据:100 [106,373,495,46,359,919,906,440,783,583,
阅读全文
摘要:O(k)空间O(k2)时间
阅读全文
摘要:使用归并排序和快速排序:时间复杂度为O(nlogn),快排132ms,归并880ms,stl 的sort() 80ms 考虑到负数,最大值有两种情况:两个负数一个正数相乘,或者三个正数相乘,取两个的最大值
阅读全文
摘要:暴力解法:O(n2)使用循环或者递归的方式求解, 我的C++代码:O(n),对于第i次计算,每次记录最大值与当前元素乘积,所有不为0的数到当前元素乘积,从第一个负数的后一个元素到当前元素的乘积,以及当前元素,从这四个可能的值里挑出最大的值即为以当前下标结尾的最大乘积的连续子序列; 动态规划更规范的写
阅读全文
摘要:/* 1.hashtable 把每个字符串都放到hashtable中 a.排序 长度不同,长的放在前面,长度相同,字典序小的放在前面 b.不排序 遍历数组,对于每个字符串判断它的所有前缀是否都在hashtable中,如果排序的话,满足条件就返回; 不排序的话,需要遍历所有,比较长度和字典序 2.tr
阅读全文
摘要:二维数组动态规划,还可以采用一维数组进行动态规划。
阅读全文
摘要:只用一维数组: O(mn)time O(mn) space
阅读全文
摘要:可以参考:cs231n assignment1 SVM 完整代码 231n作业 多类 SVM 的损失函数及其梯度计算(最好)https://blog.csdn.net/NODIECANFLY/article/details/82927119 (也不错) 作业部分: 完成结构化SVM的损失梯度的理论计
阅读全文
摘要:方法一:回溯法(用递归) 最基本可以将triangle数组看做一个邻接矩阵的变形,采用深度优先搜索的方法自顶向下遍历,如果triangle数组长度为n那么时间复杂度为O(2^n)(或者如果元素个数为N,那么复杂度N(log(N)) 方法二:动态规划 自底向上递推:可以使用一维数组来完成,从而O(n)
阅读全文
摘要:递归方法: 时间O(2^n),空间O(logn) 递归+记忆化搜索: 时间O(n),空间O(logn) 动态规划: 时间O(n),空间O(n) 改进版动态规划: 时间O(n),空间O(1) 数学方法:直接通过矩阵运算算出来,参见《算法设计指南》待补充 也可参考leetcode 解答:https://
阅读全文
摘要:方法一:C++ dfs+string to int的哈希表 方法二:使用Trie树 一个别人家的java代码,依赖于Trie树题目中的Trie class 实现; python 版:不用新建Trie class: 个人根据java版写的c++:
阅读全文