• 双指针


    双指针的本质是利用传递性,从 n方 降到 n,所以不包括链表的快慢指针
    传递性可以表现为有序区间收缩,两边的最值等等

    例题切入

    右比左最大差值

    • 暴力解法: 固定一个i,然后用一个j不断在右边找,毫无疑问的n方
    • 优化的点: 语义是"i要找最小,j要找最大"。j最大这个没得优化,因为未知的只能遍历。但是“i最小”这里可以做文章,比如2后面是567xxx,本来要全比较,但是如果中间出来了一个1,2就没有比较的必要了,直接给1去操作。
    class Solution {
        public int maximumDifference(int[] nums) {
            //语义:如果右边比自己大,一路找过去
            //如果右边比自己小,自己使命完成了,下线就完事
            int l = 0;
            int r = 1;
            int res = -1;
            while(r < nums.length){
                //往右走
                if(nums[l] < nums[r]){
                    res = Math.max(res,nums[r]-nums[l]);
                }else{
                    l = r;
                }
                r++;
            }
            return res;
        }
    }
    

    不要想着一步到位

    如果老是想着左扭右扭,那么一定会陷入沼泽:两个指针到底动谁?从暴力来
    拿谁开刀? 很明显,找那个矮的下手

    class Solution {
        public int maxArea(int[] height) {
            int max = 0;
            int i = 0, j = height.length-1;
            while(i<j){
                max = Math.max(max,(j-i)*Math.min(height[i],height[j]));
                if(height[i] < height[j]){
                    i++;
                }else{
                    j--;
                }
            }
            return max;
        }
    }
    

    刷题

    • 三数之和 固定一个i,后面两个指针根据有序性不断往中间收缩:[1,..100],大了右边往左,小了左边往右
  • 相关阅读:
    JSP(一)
    Servlet(二)
    Servlet(一)
    学而不思则罔,思而不学则殆
    spark运行模式之 ===> Standalone
    spark的运行模式之 ==> 本地运行模式
    Hbase Java API 测试代码
    hive的UDF函数 示例==> 时间格式转换
    自己编写MapReduce实现 Hive 的 join
    进阶程序 ==> 二次排序
  • 原文地址:https://www.cnblogs.com/purexww/p/15337237.html
Copyright © 2020-2023  润新知