leetcode刷题
文章平均质量分 79
ziyu2020
这个作者很懒,什么都没留下…
展开
-
17贪心算法Ⅲ
1,绝对值排序的实现,只需要重写sort函数的cmp方法,令cmp返回值按照绝对值较大的判断结果返回。2,cmp函数返回值要加修饰符static3,k值还有富裕的时候,因为始终要交换最后一个元素,所以只用判断k的奇偶性即可,若为偶数次交换相当于不处理,若为奇数,则反转一次即可。1.暴力法需要两层遍历,第一层是遍历第i个加油站作为起点,第二层遍历是从i开始算油耗是否支撑再走回i,环形遍历。while更适合环形遍历,因此第二层用while。原创 2022-12-27 09:47:49 · 663 阅读 · 1 评论 -
16贪心算法Ⅱ
关键在于将跳跃方案转换为覆盖范围,不纠结具体怎么跳过去的。其次,for循环的判断条件是在i原创 2022-12-23 17:50:02 · 726 阅读 · 0 评论 -
15贪心算法Ⅰ
贪心算法的前提是将供给和需求先排序,大的资源优先满足大需求,然后将满足数进行加和,即得到全局最优。1.在for循环里面,要先更新res的值,然后再重置子区间。2.贪心算法的体现就是之前区间的和原创 2022-12-23 15:16:58 · 748 阅读 · 0 评论 -
14.回溯算法
对于组合问题,采用回溯的方法暴力搜索所有满足的方案。在暴力搜索时,利用for循环对集合本身遍历,实现横向搜索,利用递归实现对纵向符合要求的方案元素深度进行搜索,搜到以后利用回溯返回for循环对应的根节点,开启下一次搜索。溯的方法暴力搜索所有满足的方案。在暴力搜索时,利用for循环对集合本身遍历,实现横向搜索,利用递归实现对纵向符合要求的方案元素深度进行搜索,搜到以后利用回溯返回for循环对应的根节点,开启下一次搜索。原创 2022-12-15 16:34:27 · 878 阅读 · 0 评论 -
12.二叉树Ⅱ
给你二叉树的根节点 ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解题思路队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。原创 2022-12-05 16:39:35 · 1341 阅读 · 0 评论 -
11.二叉树基础
刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。int val;} };大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。这里要提醒大家要注意二叉树节点定义的书写方式。在现场面试的时候 面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。转载 2022-11-29 21:43:25 · 1610 阅读 · 0 评论 -
二叉树基础理论
确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。所以大家使用自己熟悉的编程语言写算法,一定要知道常用的容器底层都是如何实现的,最基本的就是map、set等等,否则自己写的代码,自己对其性能分析都分析不清楚!而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。转载 2022-11-29 21:36:18 · 201 阅读 · 0 评论 -
10.栈与队列Ⅲ
本题第一反应用双指针做,写出了如下的代码,代码漏考虑了一旦滑窗移动,之前的max值可能出滑窗,因此某些测试案例无法通过。//存储结果max=0;i原创 2022-11-29 16:11:23 · 1902 阅读 · 0 评论 -
9.栈与队列Ⅱ
对于栈来说,若想访问栈顶元素,需要先判断栈不为空,不为空才能访问,否则会报错。没有一遍ac,错误在于:if判断相等写成了一个等号,size后面漏写了小括号。注意代码编写的严谨性,争取一次ac。由于测试案例中有极大数存在,因此存储的栈和运算的数字要定义成long long数据。将字符串转换为数字可以用stoi(string a)函数实现,返回的就是数值。原创 2022-11-28 20:50:26 · 1655 阅读 · 0 评论 -
8.栈和队列
队列两端开口,栈一端开口,因此用栈来模拟队列时需要用两个栈来实现,一个按照正常的入队顺序入栈a。另一个栈b按照a出栈的顺序将元素放入栈b,就实现了对栈a元素的逆序。这样出栈b顶端的元素就相当于出队头的元素。对于pop操作,需要记录队头元素,作为返回值。原创 2022-11-27 17:39:55 · 1757 阅读 · 0 评论 -
7.字符串总结
其实在基本操作上没有区别,但是 string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。所以想处理字符串,我们还是会定义一个string类型。原创 2022-11-27 11:34:22 · 1570 阅读 · 0 评论 -
6.字符串1
给定一个字符串s和一个整数k,从字符串开头算起,每计数至2k个字符,就反转这2k字符中的前k个字符。如果剩余字符少于k个,则将剩余字符全部反转。如果剩余字符小于2k但大于或等于k个,则反转前k个字符,其余字符保持原样。输入:s = "abcdefg", k = 2输出:"bacdfeg"请实现一个函数,把字符串s中的每个空格替换成"%20"。输入:s = "We are happy."输出:"We%20are%20happy."给你一个字符串s,请你反转字符串中单词的顺序。单词。原创 2022-11-27 10:57:56 · 1728 阅读 · 0 评论 -
哈希表(二)
ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。输入:ransomNote = "a", magazine = "b"输出:false未看讲解,按自己思路写的,但是没有一遍ac。出bug的点在于vector初始化又写错了切记,一维vector初始化按照如下写法,用小括号,因为调用了构造函数二维vector定义及初始化按如下写法。原创 2022-11-26 13:31:15 · 1797 阅读 · 0 评论 -
第三章:哈希表
数组也是一种哈希表,下标代表key键值,元素值代表value。统计英文字母出现次数就可以用哈希表来记录,键值key对应英文字母的排序,value记录字母出现的次数。可以用s[i]-'a’将字符的ascii码转换为数组下标。编程时一定要先看返回值类型。本题的交集结果存储在set中,但是题目要求返回的是vector,最后在给返回值是要将set转化为vector。遍历数组时,可以用for :这种写法set的find函数返回的是迭代器,若找到,返回的是指向该元素的迭代器。若未找到,返回的是集合end的迭代器。原创 2022-11-24 09:58:55 · 2033 阅读 · 0 评论 -
链表二交换元素和删除元素
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。原创 2022-11-22 22:30:14 · 2203 阅读 · 0 评论 -
第二章链表1
如果不定义有参构造函数,默认构造函数无参,在初始化链表时不能给值,需要分两步链表与数组性能对比性能分析。原创 2022-11-22 20:05:26 · 2072 阅读 · 0 评论 -
leetcode27 移除元素
leetcode 27 删除元素原创 2022-11-16 21:19:35 · 87 阅读 · 0 评论 -
【leetcode 704 二分查找】
leetcode 704原创 2022-11-16 20:55:24 · 612 阅读 · 0 评论 -
第一章 数组
1)数组遇到需要从两个方向同时比较的情况,考虑用双指针或双下标的方法2)在不遍历数组的情况下能够获取数组的头尾数据,灵活运用两端的数据,正序或倒序遍历、输出数组均可。注意,在遍历数组时,是用滑窗的尾下标来遍历,依次计算窗口尾部在0,1,2.。。。位置的情况。滑动的是窗口的头下标,不断移动头下标,判断是否还满足要求。在考虑返回值时,需要考虑如果窗口长度始终没有更新,说明没有符合条件的子数组,因而要返回0.这也是为什么初始化返回值时需要设置的比数组长度大。原创 2022-11-21 10:20:49 · 2117 阅读 · 0 评论