leetcode-刷题顺序推荐

本文介绍了LeetCode中按照不同主题,如数组、字符串、数与位、栈与递归、链表、哈希表、贪心算法、双指针法、树、图与搜索、二分查找、二进制运算、动态规划、数据结构、采样和计算几何等进行刷题的顺序和推荐题目。通过这个顺序,可以帮助学习者系统地掌握各种算法和数据结构。
摘要由CSDN通过智能技术生成


题目分类及刷题顺序推荐

一. 数组

数组的遍历
数组的遍历 485、495、414、628

  1. 最大连续 1 的个数
    输入:[1,1,0,1,1,1]
    输出:3
    解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
public int findMaxConsecutiveOnes(int[] nums) {
   
        int left = 0;
		int right = 0;
		int max = 0;
		while (right < nums.length) {
   
			while (right < nums.length && nums[right] == 1) right++;
			max = Math.max(max, right - left);
            right++;
            left = right;
		}
		return max;    
    }
  1. 提莫攻击
    在这里插入图片描述
// 思路: 第二次开始时间与第一次结束时间是否有交叉,减去两者时间交叉部分的即可
public int findPoisonedDuration(int[] timeSeries, int duration) {
   
        if (timeSeries.length == 0) return 0;
		int result = duration;
		int preTime = timeSeries[0] + duration - 1;
		int endTime = 0;
		for (int i = 1; i < timeSeries.length; i++) {
   
			endTime = timeSeries[i] + duration - 1;
			result += preTime >= timeSeries[i] ? endTime - preTime : duration;
			preTime = endTime;
		}
		return result;
	}
  1. 第三大的数
    在这里插入图片描述
//思路: 设置3个变量直接比较大小,排除1 2 3名
public int thirdMax(int[] nums) {
   
		long first = Long.MIN_VALUE;
		long second = Long.MIN_VALUE;
		long third = Long.MIN_VALUE;
		for (int num : nums) {
   
			if (num <= third || num == second || num == first) continue;
			if (num > first) {
   
				third = second;
				second = first;
				first = num;
			} else if (num > second) {
   
				third = second;
				second = num;
			} else if (num > third) {
   
				third = num;
			}
		}
		return (int) (third == Long.MIN_VALUE ? first : third);
	}
  1. 三个数的最大乘积
    在这里插入图片描述
// 思路: 这3个数的情况有3种
1. 3个数全是正数, 取最大的3个正数
2. 3个数全是负数, 取最大的3个负数
3. 3个数中2个正数,1个负数, 正数选最大,负数选最小, 还是数组中最大3个数
4. 3个数中1个正数,2个负数, 最大两个负数和最大的正数

第1种情况与2 3 4种情况比较,即可得出最大

public int maximumProduct(int[] nums) {
   
		Arrays.sort(nums);
		int length = nums.length;
		int max = nums[length - 1] * nums[length - 2] * nums[length - 3];
		max = Math.max(max, nums[0] * nums[1] * nums[length - 1]);
		return max;
	}

统计数组中的元素 645、697、448、442、41、274

  1. 错误的集合

在这里插入图片描述

 思路: 出现两次的是第一个答案
		1到n中不存在的是第二个答案
public int[] findErrorNums(int[] nums) {
   
		Map<Integer, Integer> map = new HashMap<>();
		for (int nm : nums) {
   
			map.put(nm, map.getOrDefault(nm, 0) + 1);
		}
		int[] result = new int[2];
		for (int i = 1; i <= nums.length; i++) {
   
			if (map.containsKey(i)) {
    
				if (map.get(i) == 2) {
   
				    result[0] = i;
                }
			} else {
   
				result[1] = i;
			}
		}
		return result;
	}
  1. 数组的度

在这里插入图片描述

思路: 计算次数最多的元素范围
	 如果多个次数相同,那就取最大的
public int findShortestSubArray(int[] nums) {
   
        Map<Integer, int[]> map = new HashMap<Integer, int[]>();
        int n = nums.length;
        for (int i = 0; i < n; i++) {
   
            if (map.containsKey(nums[i])) {
   
                // [0]是计算次数, [1]起始点, [2]结束点
                map.get(nums[i])[0]++;
                map.get(nums[i])[2] = i;
            } else {
   
                map.put(nums[i], new int[]{
   1, i, i});
            }
        }
        int maxNum = 0, minLen = 0;
        for (Map.Entry<Integer, int[]> entry : map.entrySet()) {
   
            int[] arr = entry.getValue();
            if (maxNum < arr[0]) {
   
                maxNum = arr[0];
                minLen = arr[2] - arr[1] + 1;
            } else if (maxNum == arr[0]) {
   
                if (minLen > arr[2] - arr[1] + 1) {
   
                    minLen = arr[2] - arr[1] + 1;
                }
            }
        
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,推荐LeetCode刷题顺序是按照题目类型刷题,优先选择树、链表、二分查找、DFS、BFS、动态规划等常见类型的题目。可以先做2~4道简单题,然后再做中等难度的题目。在选择题目时,可以优先选择题目序号小、点赞多、提交成功率高的题目,这样可以从简单入手,节省时间。同时,LeetCode每道题目都有“模拟面试”功能,可以给自己设定时间限制,如果做不出来可以看答案,然后记住思路后再自己尝试一遍。每种类型的题目做完10+道后,可以总结规律。 根据引用\[3\]的内容,题目可以按照不同的分类进行刷题,比如数组与贪心算法、子数组与贪心算法、子序列与贪心算法、数字与贪心、单调栈法、双指针法等。可以根据自己的兴趣和需求选择相应的题目进行刷题。 综上所述,LeetCode刷题顺序可以按照题目类型或者题目分类进行选择。 #### 引用[.reference_title] - *1* [LeetCode 刷题顺序,按标签分类,科学刷题!](https://blog.csdn.net/fengyuyeguirenenen/article/details/125099023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [leetcode 刷题指南 & 刷题顺序](https://blog.csdn.net/qijingpei/article/details/125561071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [leetcode-刷题顺序推荐](https://blog.csdn.net/weixin_38087674/article/details/114107841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值