主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p

  高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己的切身经历更新):

  算法不是纯粹拼智商的,智商高,就一定很厉害,不够聪明,就一定不行。算法是一种技能,是可以通过科学合理的方式训练出来的能力。目前国内大厂的算法考察,基本不会超过leetcode 中等难度,上限难度基本都是leetcode 中等题里面的中等难度 基本的算法数据结构是有限的。比如说链表,二叉树,二分查找,动态规划,哈希表。。。 我喜欢按算法的分类来选题和刷题,比如一个时间段,只刷链表题,待刷得差不多的时候,接下来再刷二叉树的题。。。这种做法可以极大的提高刷题的速度,而且能带来更好的效果。

/*****************************************************************************************

注:这个可能不更了,以后按照分类来更,二叉树、链表、二分查找、动态规划、哈希表

****************************************************************************************/

类型top100中的典型问题和解决办法

226.翻转二叉树

  二叉树的问题首先要搞清楚 二叉树的遍历方式:递归(感觉递归就是为二叉树设计的),前序、中序、后续遍历其实就是根节点的位置,根左右(前序),左根右(中序),左右根(后续){然而并没有感觉有啥子用处} :p 递归的返回值挺重要的。

  1. strcut TreeNode  //二叉树结构
  2. {
  3.   int val;
  4.   TreeNode *left;
  5.   TreeNode *right;
  6.   TreeNode(int x):val(x),left(NULL),right(NULL) {}
  7. };
    TreeNode* invertTree(TreeNode* root)
    {
      if(root)
      {
        TreeNode *tmp;
        tmp = root->left;
           root->left=root->right;
           root->right=tmp;
           invertTree(root->left);
           invertTree(root->right);
        }
       return root;
    }

206.反转链表

  链表的特点:有下一个节点的指针,很方便进行遍历,但是想要反转链表还需要当前节点的前一个节点才行,因此我们需要定义一个变量用来存储前面(pre)节点就可以了;

  1. struct ListNode
    {
  2. int val;
  3. ListNode *next;
  4. ListNode(int x):val(x), next(NULL) {}
    }; 
  1. ListNode* reverseList(ListNode* head)
  2. {
  3. ListNode *pre = NULL;
  4. ListNode *cur = head;
  5. while(cur)
  6. {
  7. ListNode *tmp=pre; //临时存储pre指针
  8. pre=cur;
  9. cur=cur->next;
  10. pre->next=tmp; //注意这个顺序,这个必须在上一行后面。
  11. }
  12. return pre;
  13. }

136.数组中只出现一次的数字

给定一个非空数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个出现一次的元素。

位运算 :共有6种位运算符 &与运算  |或运算   ^异或运算   ~非运算(求补) >>右移 $x2$  <<左移

a^0=a a^a=0

  1. int singleNumber(vector<int>& nums)
  2. {
  3. //最简单的异或操作 a^0=a;a^a=0;
  4. int ret=;
  5. int len=nums.size();
  6. for(int i=;i<len;i++)
  7. {
  8. ret=nums[i]^ret;
  9. }
  10. return ret;
  11. }

169.多数元素

map的结构和用法:c++的map相对于python简直就是太难用了;

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

  1. class Solution {
  2. public:
  3. int majorityElement(vector<int>& nums)
  4. {
  5. int len=nums.size();
  6. int n=len/;
  7. map<int,int> m;
  8. map<int,int>::iterator it_m;
  9. for(int i=;i<len;i++)
  10. {
  11. if(m.find(nums[i])==m.end()) //c++ 判断map中key的一种方法
  12. {
  13. m[nums[i]]=;
  14. }
  15. else
  16. {
  17. m[nums[i]]+=;
  18. }
  19. }
  20. for(it_m=m.begin();it_m!=m.end();it_m++) //c++ map 使用迭代器的遍历方法
  21. {
  22. if(it_m->second > n) return it_m->first;
  23. }
  24. return ;
  25. }
  26. };

21.合并两个有序链表

递归 函数总是返回小的链表头,小的链表头会在每次迭代时更新为next

  1. struct ListNode {
  2. int val;
  3. ListNode *next;
  4. ListNode(int x) : val(x), next(NULL) {}
  5. };
  6. class Solution {
  7. public:
  8. ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
  9. {
  10. if(l1 == NULL)
  11. {
  12. return l2;
  13. }
  14. else if(l2 == NULL)
  15. {
  16. return l1;
  17. }
  18. else if(l1->val < l2->val)
  19. {
  20. l1->next=mergeTwoLists(l1->next,l2);
  21. return l1;
  22. }
  23. else
  24. {
  25. l2->next=mergeTwoLists(l1,l2->next);
  26. return l2;
  27. }
  28. }
  29. };

LeetCode刷题笔记和想法(C++)的更多相关文章

  1. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  2. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  3. Leetcode刷题笔记(双指针)

    1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...

  4. LeetCode刷题笔记(1-9)

    LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...

  5. leetcode刷题笔记

    (1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...

  6. leetcode刷题笔记08 字符串转整数 (atoi)

    题目描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...

  7. 【leetcode刷题笔记】Populating Next Right Pointers in Each Node II

    What if the given tree could be any binary tree? Would your previous solution still work? Note: You ...

  8. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

  9. leetcode刷题笔记231 2的幂

    题目描述: 给定一个整数,写一个函数来判断它是否是2的幂. 题目分析: 判断一个整数是不是2的幂,可根据二进制来分析.2的幂如2,4,8,等有一个特点: 二进制数首位为1,其他位为0,如2为10,4为 ...

随机推荐

  1. python学习HTML之CSS

    1.sytle属性设置 . <head> <meta charset="UTF-8"> <title>Title</title> & ...

  2. docker部署-windows环境

    docker部署-windows环境 1.      docker windows 1.1.    安装 win7或者win8需要利用docker toolbox来安装,其是一个docker工具集,w ...

  3. 吴裕雄--天生自然Numpy库学习笔记:NumPy 创建数组

    import numpy as np x = np.empty([3,2], dtype = int) print (x) import numpy as np # 默认为浮点数 x = np.zer ...

  4. 关于OSPF LSA不稳定!

    Issue 1 Solution It is important that you understand the error message during attempts to troublesho ...

  5. java中对于多态的一个实例分析

    首先来看这样的一段代码,其中对于类的定义如下: class Parent{ public int myValue=100; public void printValue() { System.out. ...

  6. sqlserver数据将多个表或视图的数据合并到一个表或视图里的sql语句

    create view dbo.V_ZDUser_DDasselect * from dbo.V_ZDUser_DD1 union all select * from dbo.V_ZDUser_DD2 ...

  7. CSS shapes布局教程

    文章参考至 一.前言&索引 CSS Shapes布局可以实现不规则的文字环绕效果,需要和浮动配合使用. 兼容性如下图: 还是很不错的,移动端可用,内部中后台项目可用. CSS shapes布局 ...

  8. 使用类进行面向对象编程 Class 实例化 和 ES5实例化 对比,继承

    ES5 写法 function Book(title, pages, isbn) { this.title = title; this.pages = pages; this.isbn = isbn; ...

  9. from flyai.dataset import Dataset 报错

    from flyai.dataset import Dataset 报错 No module name 'flyai' ​ 先找到ide中使用的Python对应的pip的位置. ​ windows用户 ...

  10. 从数组A中删除在数组B中存在的元素,用C语言实现

    从数组A中删除在数组B中存在的元素,用C语言实现 考验数组操作的能力,C语言的熟练程度. //功能:从数组A中删除在数组B中也存在的数据 //输入:arrA --- 数组A // lenA --- 数 ...