贪心算法学习
贪心算法并没有固定的套路。所以唯一的难点就是如何通过局部最优,推出整体最优。体感就是贪心算法挺看感觉的,十分取巧,多做多练才能在遇到难题的时候想到比较好的策略,此外大多数贪心的题目往往可以通过动态规划来解决,动态规划还是作为重点内容,贪心算法就不把遇到的所有题目都记录下来了。 摆动序列 问题:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可...
贪心算法并没有固定的套路。所以唯一的难点就是如何通过局部最优,推出整体最优。体感就是贪心算法挺看感觉的,十分取巧,多做多练才能在遇到难题的时候想到比较好的策略,此外大多数贪心的题目往往可以通过动态规划来解决,动态规划还是作为重点内容,贪心算法就不把遇到的所有题目都记录下来了。 摆动序列 问题:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可...
之前已经在二叉树的部分接触到了回溯算法,实际上回溯法解决的问题都可以抽象为树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度就构成了树的深度,递归就要有终止条件,所以必然是一棵高度有限的树。 回溯三部曲: 回溯函数模板返回值以及参数:回溯算法中函数返回值一般为void,但回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是...
二叉树遍历 递归遍历 这是所有二叉树递归的题目离不开的基础,不同的遍历顺序决定了递归逻辑的顺序。 递归算法的三个要素: 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条...
栈 用栈实现队列 问题:用栈实现队列,请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty) 这题是一道简单的模拟题,考察栈的常用方法,很适合对栈有一个初步的理解。由于栈的特性,只用一个栈是无法实现队列的,我们构造一个输入栈一个输出栈。 代码示例: class MyQueue { Stack<Integer> ...
字符串的操作主要涉及到String,char[],StringBuilder,StringBuffer四种,值得注意的是,Java中String是无法被修改的,所以做题的时候往往涉及到这几种类型的转换,需要熟悉不同类型的操作方法。 字符串操作常用方法: toCharArray(String):可以将String类转换为char数组。 String(char[], left, ri...
什么是哈希表?可以是数组,可以是HashSet,可以是HashMap,我做哈希表这类题时更多的是不知道怎么灵活使用哈希表提供的方法,希望通过这个专题的学习能够有所进步。 HashMap常用方法: put(key,value),我们经常用存储一些常用的数据,比如flag、百分比之类的,我们就可以返回map结构,如果key相同则值会覆盖,允许key和value为null。 get(k...
链表基础 移除链表 问题:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点。 这个问题很简单,不需要过多进行说明,但在解题的过程中会碰到各种各样隐形的问题,比如NullPointerException、要考虑头结点需要删除时的情况等等,对于头结点的特殊处理,可以采用添加虚拟节点再进行统一处理,也可以不添加虚拟节点特殊...
二分查找 二分查找 问题: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 该题问题在于边界的处理,到底是 while(left < right) 还是 while(left <= right),到底是right = middle呢,还是要right =...
2024.05.21 关于GBC 四月新番里尤其喜欢GBC,整个四月坚持看到现在的只有GBC和素晴第三季,由于是原创所以格外担心其烂尾,也因此没少看其他路人的讨论。每每看到自己中意的作品因为一些自己觉得无足轻重的原因被贬得一文不值的时候,都想和这些人辩个高下,但由于我曾立下过“再也不在网络上和人辩经”的flag,我没有过多参与其中,只能自行消化这份不满情绪。 食堂打包回到宿舍边吃边看了一遍最...