Leetcode刷题顺序(自用更新中)

Leetcode刷题顺序与总结(更新中)



前言

刷题顺序:先从同一类型里题目开始刷起,同一类型里再从简单到中等到困难刷起,题型顺序建议:数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论。整理一些自己在刷题时的想法,参考链接:https://github.com/youngyangyang04/leetcode-master


一、数组

1.二分法

适用场景:只要看到面试题里给出的数组是有序数组,都可以想一想是否可以使用二分法

二分法有两种模板,自己只考虑left <= right时的情况,这样区间定义只考虑[left, right]

    public static int searchInsert(int[] nums, int target) {
   
        while(nums.length <= 0){
   
            return 0;
        }
        int left = 0,right = nums.length-1,mid = 0;
        while (left <= right){
   
            System.out.println(left+""+mid+""+right);
            mid = (right+left)/2;
            if(nums[mid] == target){
   
                return mid;
            }else if (nums[mid] < target){
   
                left = mid + 1;
            }else{
   
                right = mid - 1;
            }
        }
        return  right + 1;
    }

想法:自己做了几道二分法的题目,69,74,offer_53等。题目上大致思路一致,主要考虑区间的问题,建议画图举几个例子确定区间。


2.双指针法

适用场景:是你想要从两端向中间迭代数组。这时你可以使用双指针技巧:一个指针从始端开始,而另一个指针从末端开始。值得注意的是,这种技巧经常在排序数组中使用。
双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。比较经典的一道题 T15_三数之和

public static List<List<Integer>> threeSum(int[] nums) {
   
        Arrays.sort(nums);
        int left,right;
        List<List<Integer>> res = new ArrayList<>();
        if (nums == null || nums.length <= 2) return res;
        for(int i = 0;i <= nums.length - 3;i++)
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值