小小笔记整理

1.Deque、Queue

Queue就是FIFO的队列

Deque相当于双向队列,可以首尾添加或删除

总结:在栈和队列的情况中,可以都用Deque类

PriorityQueue:优先队列,可以作为使用,当需要根据传入的Comparator实现大小的调整,会是一个很好的选择。

ArrayDeque通常作为队列使用,但是栈的效率不如LinkedList高。

LinkedList通常作为或队列使用,但是队列的效率不如ArrayQueue高

【注】ArrayQueue只在删除元素时比LinkedList慢一点

        Deque中,addFirst()和push作用相同,都是在栈顶添加,addLast()是添加到栈底


 2.在二叉树中递归什么时候需要写return

(1)如果需要搜索整颗二叉树且不用处理递归返回值,递归函数就不要返回值。

(2)如果需要搜索整颗二叉树且需要处理递归返回值,递归函数就需要返回值。

(3)如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。

3.贪心算法

(1)对于不需要求出具体位置的题目,只是要求统计数量或者返回true/false的,优先考虑对数据进行排序。(这是排序是只考虑一维的情况)

对二维数组进行排序:

Arrays.sort(a, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        if (o1[0]==o2[0]) return o1[1]-o2[1];
        return o1[0]-o2[0];
    }
});


其中o1[1]-o2[1]表示对于第二个元素进行升序排序如果为o2[1]-o1[1]则表示为降序

或者使用lambda表达式:

Arrays.sort(points, (o1, o2) -> Integer.compare(o1[0], o2[0]));

【注】在使用Comparator时,有可能会出现数据越界的情况,比如:o1[0]或o2[0]等于Integer.MAX_VALUE或Integer.MIN_VALUE的情况,这时候需要把compare()方法写成:

Arrays.sort(a, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        if (o1[0] > o2[0]) {
            return 1;
        }else {
            return -1;
        }
    }
});

(2)一般对于数对(j,k),还涉及排序的,根据第一个元素正向排序,根据第二个元素反向排序,或者根据第一个元素反向排序,根据第二个元素正向排序,往往能够简化解题过程

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值