LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p
高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己的切身经历更新):
算法不是纯粹拼智商的,智商高,就一定很厉害,不够聪明,就一定不行。算法是一种技能,是可以通过科学合理的方式训练出来的能力。目前国内大厂的算法考察,基本不会超过leetcode 中等难度,上限难度基本都是leetcode 中等题里面的中等难度 基本的算法数据结构是有限的。比如说链表,二叉树,二分查找,动态规划,哈希表。。。 我喜欢按算法的分类来选题和刷题,比如一个时间段,只刷链表题,待刷得差不多的时候,接下来再刷二叉树的题。。。这种做法可以极大的提高刷题的速度,而且能带来更好的效果。
/*****************************************************************************************
注:这个可能不更了,以后按照分类来更,二叉树、链表、二分查找、动态规划、哈希表
****************************************************************************************/
类型top100中的典型问题和解决办法
226.翻转二叉树
二叉树的问题首先要搞清楚 二叉树的遍历方式:递归(感觉递归就是为二叉树设计的),前序、中序、后续遍历其实就是根节点的位置,根左右(前序),左根右(中序),左右根(后续){然而并没有感觉有啥子用处} :p 递归的返回值挺重要的。
strcut TreeNode //二叉树结构
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL) {}
};
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)节点就可以了;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x):val(x), next(NULL) {}
};
ListNode* reverseList(ListNode* head)
{
ListNode *pre = NULL;
ListNode *cur = head;
while(cur)
{
ListNode *tmp=pre; //临时存储pre指针
pre=cur;
cur=cur->next;
pre->next=tmp; //注意这个顺序,这个必须在上一行后面。
}
return pre;
}
136.数组中只出现一次的数字
给定一个非空数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个出现一次的元素。
位运算 :共有6种位运算符 &与运算 |或运算 ^异或运算 ~非运算(求补) >>右移 $x2$ <<左移
a^0=a a^a=0
int singleNumber(vector<int>& nums)
{
//最简单的异或操作 a^0=a;a^a=0;
int ret=;
int len=nums.size();
for(int i=;i<len;i++)
{
ret=nums[i]^ret;
}
return ret;
}
169.多数元素
map的结构和用法:c++的map相对于python简直就是太难用了;
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
class Solution {
public:
int majorityElement(vector<int>& nums)
{
int len=nums.size();
int n=len/;
map<int,int> m;
map<int,int>::iterator it_m;
for(int i=;i<len;i++)
{
if(m.find(nums[i])==m.end()) //c++ 判断map中key的一种方法
{
m[nums[i]]=;
}
else
{
m[nums[i]]+=;
}
}
for(it_m=m.begin();it_m!=m.end();it_m++) //c++ map 使用迭代器的遍历方法
{
if(it_m->second > n) return it_m->first;
}
return ;
}
};
21.合并两个有序链表
递归 函数总是返回小的链表头,小的链表头会在每次迭代时更新为next
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
if(l1 == NULL)
{
return l2;
}
else if(l2 == NULL)
{
return l1;
}
else if(l1->val < l2->val)
{
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}
else
{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
};
LeetCode刷题笔记和想法(C++)的更多相关文章
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
- Leetcode刷题笔记(双指针)
1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...
- LeetCode刷题笔记(1-9)
LeetCode1-9 本文更多是作为一个习题笔记,没有太多讲解 1.两数之和 题目请点击链接 ↑ 最先想到暴力解法,直接双循环,但是这样复杂度为n平方 public int[] twoSum(int ...
- leetcode刷题笔记
(1)Best Time to Buy and Sell Stock Total Accepted: 10430 Total Submissions: 33800My Submissions Say ...
- leetcode刷题笔记08 字符串转整数 (atoi)
题目描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...
- 【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 ...
- LeetCode刷题笔记-回溯法-分割回文串
题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...
- leetcode刷题笔记231 2的幂
题目描述: 给定一个整数,写一个函数来判断它是否是2的幂. 题目分析: 判断一个整数是不是2的幂,可根据二进制来分析.2的幂如2,4,8,等有一个特点: 二进制数首位为1,其他位为0,如2为10,4为 ...
随机推荐
- 《记一次Linux被入侵全过程》阅读笔记
此前从未了解过关于网络安全相关方面的内容,仅仅知道安全性是软件必不可少的质量属性之一,而由于自己所做项目对安全性需求基本为无,所以很少对此进行关注.今天看到作者系统被入侵的经验,于是点开来读,以积累他 ...
- 「BZOJ4548」小奇的糖果
传送门 memset0好评 解题思路 比较恶心的一道数据结构题 看一眼题面,马上想到离散化. 然后将一维排序,另一维用树状数组或者线段树维护. 然后就没思路了 发现一个性质: 不包含所有的颜色,当然要 ...
- JDK源码分析-HashMap
一.HashMap的内部属性 1.1 成员变量 1.1.1 size: HashMap包含的KV键值对的数量,也就是我们通常调用Map.size()方法的返回值 public int size() { ...
- 模仿.NET框架ArrayList写一个自己的动态数组类MyArrayList,揭示foreach实现原理
通过.NET反编译工具可以查看到ArrayList内部的代码,发现ArrayList并非由链表实现,而是由一个不断扩容的数组对象组成. 下面模仿ArrayList写一个自己的MyArrayList. ...
- numpy.eye() 生成对角矩阵
numpy.eye(N,M=None, k=0, dtype=<type 'float'>) 关注第一个第三个参数就行了 第一个参数:输出方阵(行数=列数)的规模,即行数或列数 第三个参数 ...
- JMS消息传递的类型
对于消息的传递有两种类型: 一种是点对点的,即一个生产者和一个消费者一一对应: 另一种是发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进 行接收.
- 图书商城(基于Jsp+Servlet)
这个项目主要是加深一下对于servlet和jsp知识相关的了解以及简单业务逻辑的处理. 用户更新的逻辑: 1.点击修改用户的那一行可以获取到用户的id 2.跳转到一个servlet,去查询该用户的基本 ...
- centos7 ip配置及ssh服务连接
一.配置ip /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-ens33 这个是配置网卡的配置文件,名字可能不一样,大概为:ifcfg-网卡名 TYP ...
- Python3.5学习之旅——day3
本节内容: 1.字符串操作 2.字典操作 3.集合 4.文件操作 5.字符编码与转码 6.函数与函数式编程 一.字符串操作 name='kobe' name.capitalize() 首字母大写 na ...
- MySQL8.0 ROW_NUMBER、RANK、DENSE_RANK窗口函数 分组排序排名
MySQL8.0 (ROW_NUMBER)窗口函数 排名 暂时理解函数意义,后面再进行优化,如果有关变量排序,查看这个大哥的 mysql的分组排序和变量赋值顺序 先查看一个例子: # 按照每科课程分数 ...