![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
Frances_S
这个作者很懒,什么都没留下…
展开
-
LeetCode:Sqrt(x)
class Solution {public: int sqrt(int x) {//二分查找,如果不能开方,返回最大的数y,使得y^2x if(x<=1) return x; int low=1; int high=x; unsigned long long temp; unsign原创 2015-03-18 11:44:23 · 504 阅读 · 0 评论 -
LeetCode:Gas Station
写到一半的暴力算法才想起来可以用动态规划,但是还是不死心写完跑了一下,果然超时,还是乖乖换成动态规划吧class Solution {public: int canCompleteCircuit(vector &gas, vector &cost) { if(gas.empty()||cost.empty()||gas.size()!=cost.size()||(原创 2015-03-09 20:55:55 · 348 阅读 · 0 评论 -
LeetCode:Best Time to Buy and Sell Stock II
class Solution {public: int maxProfit(vector &prices) { //在纸上随手写几个数,就会发现只要将相邻的两个数后面的减去前面的得到的如果是正数相加就可以得到所有的利润 int sum=0; int profit; int i; if(prices.size(原创 2015-03-09 17:20:46 · 305 阅读 · 0 评论 -
LeetCode:Jump Game
好久没有复习贪心算法了,借着这个题目回顾一下。实际应用中用到贪心算法的地方很多,最小生成树算法、哈夫曼树的构造迪杰特斯拉算法都是贪心算法。贪心算法的思路简单来说,就是每次都找到当下的最优解,把一个大问题划分成一个个子问题。拿jump Game来说,当处于位置i的时候,下一步跳跃的步数可以重新选择跳跃的步数,选择的范围是0~A[i],或者继续走上一次决定的步数,也就是往前走一步class S原创 2015-03-09 15:43:45 · 315 阅读 · 0 评论 -
Find Peak Element
先给出一个时间复杂度是O(n)的常规算法:class Solution {public: int findPeakElement(const vector &num) { if(num.size()==0) return -1; if(num.size()==1) return 0; in原创 2015-03-17 18:58:43 · 326 阅读 · 0 评论 -
LeetCode:Best Time to Buy and Sell Stock
class Solution {public: int maxProfit(vector &prices) { //找到价格最低和最高的一天,最低的一天要在最高一天之前,采用贪心算法,每一次找到最大的利润,同时找到最小的买入价格 int count=prices.size(); if(count<2) return原创 2015-03-09 17:06:57 · 300 阅读 · 0 评论 -
LeetCode:Subsets
这一题让我想起了大二下学期数据结构的一个课程设计:随机发牌,也是同样运用到了二进制位的思路。这题中的排序就写了个简单的冒泡排序,一次性ACclass Solution {public: void Sort(vector&S) { int num=S.size(); if(num<2) return; i原创 2015-03-09 13:23:01 · 371 阅读 · 0 评论 -
LeetCode:Reverse Bits
class Solution {public: uint32_t reverseBits(uint32_t n) {//unint32_t的库文件是stdint.h uint32_t result; int i; int a; result=0; int flag=1;//增加一个标记位,用来记录是否是第一位原创 2015-03-09 11:35:52 · 399 阅读 · 0 评论 -
LeetCode:Single Number II
class Solution {public: int singleNumber(int A[], int n) {//Int为32位,统计每一位上的1的个数,若不是3的倍数,就设置为1 int num[32]; int i,j; memset(num,0,sizeof(num));//memset可以方便的清空一个结构类型的变量或数组。原创 2015-03-07 20:56:43 · 315 阅读 · 0 评论 -
LeetCode:Remove Duplicates from Sorted Array II
很常见的题目,容易错的地方是没有判断超出的个数以及如果没有超过,则需要将count回归初始值class Solution {public: int removeDuplicates(int A[], int n) { if(n<3)//如果n小于3,不存在重复三次的数字,直接返回原长度 return n; int i,j;原创 2015-03-05 15:59:52 · 373 阅读 · 0 评论 -
LeetCode:Maximum Subarray
class Solution {public: int maxSubArray(int A[], int n) { int count; int i; int sum,result; result=INT_MIN; if(n==1) return A[0]; sum=0原创 2015-03-09 22:00:58 · 320 阅读 · 0 评论 -
LeetCode:Number of 1 Bits
新更新的题目,很常规,强迫症就刷一下吧~class Solution {public: int hammingWeight(uint32_t n) { int count; count =0; while(n!=0) { n=n&(n-1); count++;原创 2015-03-10 14:40:03 · 483 阅读 · 0 评论 -
LeetCode:Sum Root to Leaf Numbers
折腾了半个晚上的题目,拿到题目第一想到的是递归,就开始balabala写,主要思想是用根节点*10+左孩子的sumNumbers,怎么都不运行成功,后来想起来这是类似深度搜索,根节点*10显然是错误的。class Solution {public: int sumNumbers(TreeNode *root) { return sumNumbers(root,0)原创 2015-03-10 21:18:38 · 333 阅读 · 0 评论 -
LeetCode:Search for a Range
class Solution {public: vector searchRange(int A[], int n, int target) { //二分查找,由于会出现重复数字的情况 vector result; if(n==0) { result.push_back(-1);原创 2015-03-23 21:30:28 · 391 阅读 · 0 评论 -
Leetcode:Unique Binary Search Trees
class Solution {public: long long f(int n, int m) { long long result; result=1; for(int i=n;i<=m;i++) { result=result*i; } retur原创 2015-03-14 15:28:39 · 295 阅读 · 0 评论 -
LeetCode:Generate Parentheses
深度优先遍历是硬伤,尤其是全排列,折腾了两个小时,才终于AC~class Solution {public: vector generateParenthesis(int n) { int left; left=n; vectorresult; string s; s=s+'('; ge原创 2015-03-13 14:16:05 · 297 阅读 · 0 评论 -
LeetCode:Combinations
对深度遍历思想还是掌握得不够熟练,这一类题目还是要多多联系。class Solution {//深度遍历的算法,递归调用,可以看一下解决树的介绍,就很快写出算法public: vector> combine(int n, int k){ vector> result; vectorelement; combine(n,k,1,0,element原创 2015-03-12 16:20:17 · 317 阅读 · 0 评论 -
LeetCode:Flatten Binary Tree to Linked List
class Solution {public: void flatten(TreeNode *root) { //递归思想,将左子树和右子树都变成flatted,然后将右子树的第一个结点连接到左子树的最后一个结点 if(!root) return; flatten(root->left); flatten(r原创 2015-03-10 22:08:49 · 317 阅读 · 0 评论 -
LeetCode:Convert Sorted Array to Binary Search Tree
一次AC,很常规的递归调用。class Solution {public: TreeNode *sortedArrayToBST(vector &num) {//递归算法,取中间数为根节点,两边的数组递归调用构造左子树和右子树 if(num.empty())//如果为空,则返回空子树 return NULL; TreeNode *root;原创 2015-03-11 14:22:15 · 321 阅读 · 0 评论 -
LeetCode:Populating Next Right Pointers in Each Node
写到一半,被导师叫到办公室说了一个多小时的事情,回来继续写,居然还AC也是人品爆发。class Solution {public: void connect(TreeLinkNode *root) { //递归算法实现,由于是满二叉树,左子树和右子树是对称的,可以将左子树和右子树从根节点开始连接,类似判断对称二叉树的算法 if(!root||(root&&!r原创 2015-03-11 16:00:29 · 286 阅读 · 0 评论 -
LeetCode:Search Insert Position
class Solution {public: int searchInsert(int A[], int n, int target) { if(n==0) return 0; if(n==1) { if(target==A[0]) retur原创 2015-03-17 22:18:01 · 356 阅读 · 0 评论 -
LeetCode:Pow(x, n)
class Solution {public: double pow(double x, int n) {//分治法 double result; if(n { x=1/x; n=-1*n; } if(n==0) re原创 2015-03-17 21:49:28 · 394 阅读 · 0 评论 -
LeetCode:Longest Substring Without Repeating Characters
复习了一下STL容器中的map, 才发现map的排序并非按照存储顺序,而是按照它规定的顺序,比如Int类型会按照数值大小,于是需要一个指针保存最大子串的起始位置。class Solution {public: int lengthOfLongestSubstring(string s) { //利用哈希表保存字符串的元素是否出现,若发现有重复元素,count的值对比之前的值是原创 2015-03-05 15:27:51 · 272 阅读 · 0 评论 -
LeetCode:Convert Sorted List to Binary Search Tree
中序遍历思想,找到中位数构建根节点,然后左右链表递归构建左子树和右子树class Solution {public: TreeNode *sortedListToBST(ListNode *head) { //递归方法实现,通过中位数构建树的根节点,左右子链表构建左子树和右子树 TreeNode *root=NULL; if(!he原创 2015-03-04 16:46:52 · 390 阅读 · 0 评论 -
LeetCode:Reorder List
综合性很强的一个题目,运用到了中间结点查找和头插法逆序,在草稿纸上多写几个例子就能找到规律:转换后的链表最后一个结点始终是中间结点。于是从中间结点后分割,将后半部分逆序,然后间隔插入即可。class Solution {public: ListNode *reverseList(ListNode *head)//逆序,头插法 { if(!head||!he原创 2015-03-04 15:03:11 · 283 阅读 · 0 评论 -
LeetCode:Valid Parentheses
遇到左括号压栈,遇到右括号,判断是否为空,若栈空则不匹配,若栈顶元素与右括号匹配,则继续。最后判断栈是否为空,若为空,则匹配class Solution {public: bool isValid(string s) { stackbracket; int i; if(s.length()==0) retur原创 2015-02-23 22:26:55 · 283 阅读 · 0 评论 -
LeetCode:Longest Common Prefix
题目不难,主要是被string类中的erase弄晕了。class Solution {public: string longestCommonPrefix(vector &strs) { string s; int length; int i,j; if(strs.empty()) retur原创 2015-02-24 22:57:15 · 389 阅读 · 0 评论 -
LeetCode:Remove Nth Node From End of List
很常规的题目,但稍不留神就容易出错,有这么几种情况需要注意:1)删除的结点正好是第一个结点2)删除的结点正好是最后一个结点PS:由于链式存储结构的内存空间不一定是连续的,千万不要用p++,要记得用p=p->next到达下一个结点/** * Definition for singly-linked list. * struct ListNode { * int va原创 2015-02-23 23:10:05 · 317 阅读 · 0 评论 -
LeetCode :Reverse Integer
Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321原创 2015-02-23 15:30:53 · 313 阅读 · 0 评论 -
Remove Duplicates from Sorted Array
常规做法很普通,时间复杂度是O(n^2),那么如何使得时间复杂度为O(n)呢,可以采用下列算法:class Solution {public: int removeDuplicates(int A[], int n) { int index=1; int i; if(n==0) return 0; for原创 2015-02-23 22:08:55 · 302 阅读 · 0 评论 -
LeetCode:Rotate Array
想了半天最后还是用了暴力解法,总觉得应该还有更巧妙的算法。class Solution {public: void rotate(int nums[], int n, int k) { int temp; int i,j; int count; k=n-k%n;//将向右旋转变成向左旋转,但注意k的值有可能比n大原创 2015-02-24 12:13:51 · 235 阅读 · 0 评论 -
LeetCode:String to Integer
需要考虑一下几种特殊用例:1 开头有空格的字符串,如“ 123”2 溢出情况,需要输出int最大或最小值,这个判断可以参照翻转数字位数那道题3 有正负号的问题,如“+123”,“-123”4 数字夹杂着其他字符,如“1a3”,只返回前面的数字“1”5 正负号不止一个,返回0,如“++1”class Solution {public: int atoi原创 2015-02-25 11:06:58 · 390 阅读 · 0 评论 -
LeetCode:ZigZag Conversion
一次性通过的题目,很简单,通过多举几个例子找到规律,划归为几个等差数列即可。class Solution {public: string convert(string s, int nRows) { string result; if(nRows==1) return s; else{原创 2015-02-23 21:16:40 · 296 阅读 · 0 评论 -
LeetCode:Valid Sudoku
判断数独就是检查其是否满足三个条件:1 每一行的元素没有重复,且范围在1~92 每一列的元素没有重复,且范围在1~92 每一个9宫格元素没有重复,且范围在1~9class Solution {public: bool isValidSudoku(vector > &board) { unordered_maprow_map; unorder原创 2015-02-24 20:26:41 · 323 阅读 · 0 评论 -
LeetCode:Consecutive Numbers
数据库真是快忘光了,命令都不太熟悉,趁这几天好好复习~这一题要注意是consecuitively(连续的),第一次做的时候没在意,直接group by,想了半天都不知道为啥不是AC。其次要注意的是DISTINCTselect DISTINCT(a.Num)from Logs a ,Logs b, Logs cwhere a.Id+1=b.Id and b.Id+1=c.Id a原创 2015-02-26 13:03:33 · 508 阅读 · 0 评论 -
LeetCode:Department Highest Salary
自定义每个部门最高薪水表,然后三个表连接查询select d.Name as Department, e.Name as Employee, e.Salary as Salaryfrom Employee e, Department d ,(select DepartmentId ,MAX(Salary) as Salary from Employee group by Departmen原创 2015-03-01 22:05:12 · 839 阅读 · 0 评论 -
LeetCode:Second Highest Salary
首先新建最高salary的表,然后将Employee表与自定义表连接查询,只要找出比这个最高salary小的最高salary即可select MAX(e1.Salary) as SecondHighestSalaryfrom Employee e1, (select Salary from Employee order by Salary desc limit 1) e2wher原创 2015-03-01 21:57:25 · 420 阅读 · 0 评论 -
LeetCode:Remove Duplicates from Sorted List II
很简单的一个递归算法,做了一天的链表类型的题目,发现链表最需要注意的是头尾结点的问题。class Solution {public: ListNode *deleteDuplicates(ListNode *head) {//只保留只出现一次的数 if(!head||!head->next) return head; Li原创 2015-03-05 11:15:16 · 391 阅读 · 0 评论 -
LeetCode:Linked List Cycle II
class Solution {public: ListNode *detectCycle(ListNode *head) { //判断是否有环,并找到环的入口。算法思想:设起点距离环入口结点个数为a,环中包含结点个数为r,相遇时距离环入口结点个数是x,则根据快、慢指针的速度比,得出nr+x+a=(x+a)*2,(n大于1,因为单链表是同向的)最终得到a=nr-x;变换一下公式看原创 2015-03-04 21:46:18 · 330 阅读 · 0 评论 -
Reverse Linked List II
头插法的变形体,被是否是从头结点开始绕晕了,想了半天如何区分都没想到直接用m的值判别就好了嘛~class Solution {public: ListNode *reverseBetween(ListNode *head, int m, int n) { //头插法,从m开始,插入n个即可 if(!head->next)//条件中注明结点个数至少为1,原创 2015-03-04 20:43:23 · 279 阅读 · 0 评论