1. lee75 颜色分类 patition 三个指针
  2. lee76 最小覆盖字串 滑动窗口
  3. lee78 子集 无重复数字 回溯
  4. lee79 单词搜索 回溯
  5. lee84 柱状图中最大的矩形 单调栈
  6. lee85 最大矩形 (用84的方法,在矩阵中)
  7. lee95 二叉树中序遍历
  8. lee96 不同的二叉搜索树 总结规律 动态规划
  9. lee98 验证二叉搜索树
  10. lee101 对称二叉树

lee75 颜色分类

同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

public void sortColors(int[] nums) {int len = nums.length;if (len < 2) {return;}// all in [0, zero] = 0// all in (zero, i) = 1// all in (two, len - 1] = 2// 为了保证初始化的时候 [0, zero] 为空,设置 zero = -1,// 所以下面遍历到 0 的时候,先加,再交换int zero = -1;// 为了保证初始化的时候 (two, len - 1] 为空,设置 two = len - 1// 所以下面遍历到 2 的时候,先交换,再减int two = len - 1;int i = 0;// 当 i == two 的时候,还有一个元素还没有看,// 因此,循环可以继续的条件是 i <= twowhile (i <= two) {if (nums[i] == 0) {zero++;swap(nums, i, zero);i++;} else if (nums[i] == 1) {i++;} else {swap(nums, i, two);two--;}}
}private void swap(int[] nums, int index1, int index2) {int temp = nums[index1];nums[index1] = nums[index2];nums[index2] = temp;}

lee76 最小覆盖子串

给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。
示例:
输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”
说明:
如果 S 中不存这样的子串,则返回空字符串 “”。

class Solution {public String minWindow(String s, String t) {HashMap<Character, Integer> need = new HashMap<>();HashMap<Character, Integer> window = new HashMap<>();// 存需要的字母,可能会有重复for (int i = 0; i < t.length(); i++) {char curChar = t.charAt(i);need.put(curChar, need.getOrDefault(curChar, 0) + 1);}int left = 0, right = 0;int valid = 0;int start = 0, minLen = Integer.MAX_VALUE;while (right < s.length()) {char c = s.charAt(right);right++;if (need.containsKey(c)) {window.put(c, window.getOrDefault(c, 0) + 1);if ((int)window.get(c) ==(int) need.get(c)) {// 强转valid++;}}// 判断左侧窗口while (valid == need.size()) {if (right - left < minLen) {start = left;minLen = right - left;}char d = s.charAt(left);left++;if (need.containsKey(d)) {if ((int)window.get(d) ==(int) need.get(d)) {// 强转valid--;}window.put(d, window.get(d) - 1);}}}return minLen == Integer.MAX_VALUE ? "" : s.substring(start, start + minLen);}
}

lee78 子集

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

solution1 回溯

class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<>();backtrack(0, nums, res, new ArrayList<Integer>());return res;}private void backtrack(int i, int[] nums, List<List<Integer>> res, ArrayList<Integer> tmp) {res.add(new ArrayList<>(tmp));for (int j = i; j < nums.length; j++) {tmp.add(nums[j]);backtrack(j + 1, nums, res, tmp);tmp.remove(tmp.size() - 1);}}
}

solution2 迭代

class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<>();res.add(new ArrayList<>());for (int i = 0; i < nums.length; i++) {int all = res.size();for (int j = 0; j < all; j++) {List<Integer> tmp = new ArrayList<>(res.get(j));tmp.add(nums[i]);res.add(tmp);}}return res;}
}

类lee90 子集2

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]

class Solution {public List<List<Integer>> subsetsWithDup(int[] nums) {List<List<Integer>> res=new ArrayList<>();if(nums==null || nums.length==0 ) return res;Arrays.sort(nums);helper(nums, res, new ArrayList<>(), 0);return res;}private void helper(int[] nums, List<List<Integer>> res, List<Integer> list,int start){res.add(new ArrayList<>(list));for(int i=start;i<nums.length;i++){if(i>start && nums[i] ==nums[i-1]) continue;list.add(nums[i]);helper(nums, res, list, i+1);list.remove(list.size()-1);}}
}

lee79 单词搜索

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false

提示:
board 和 word 中只包含大写和小写英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

class Solution {public boolean exist(char[][] board, String word) {char[] s=word.toCharArray();int[][] flag=new int[board.length][board[0].length];for(int i=0;i<board.length;i++){for(int j=0;j<board[0].length;j++){if(board[i][j]==s[0]){if( existHelper(board, 0, s, i, j, flag ) ){//必须有个判断,因为不止搜到的第一个为开头遍历return true;}}}}return false;}public boolean existHelper(char[][] board, int index,char[] s ,int startx, int starty, int[][] flag){if(index==s.length) return true;if( startx<0|| startx>=board.length || starty<0 || starty>=board[0].length || flag[startx][starty]==1 ||board[startx][starty]!= s[index]){return false;}flag[startx][starty]=1;if( existHelper(board,index+1,s, startx+1,starty,flag)||existHelper(board,index+1,s, startx,starty+1,flag)||existHelper(board,index+1,s, startx-1,starty,flag)||existHelper(board,index+1,s, startx,starty-1,flag)){return true;}flag[startx][starty]=0;return false;}
}

lee84 柱状图中的最大矩形 单调栈

class Solution {public int largestRectangleArea(int[] heights) {// 这里为了代码简便,在柱体数组的头和尾加了两个高度为 0 的柱体。int[] tmp = new int[heights.length + 2];System.arraycopy(heights, 0, tmp, 1, heights.length); Deque<Integer> stack = new ArrayDeque<>();int area = 0;for (int i = 0; i < tmp.length; i++) {// 对栈中柱体来说,栈中的下一个柱体就是其「左边第一个小于自身的柱体」;// 若当前柱体 i 的高度小于栈顶柱体的高度,说明 i 是栈顶柱体的「右边第一个小于栈顶柱体的柱体」。// 因此以栈顶柱体为高的矩形的左右宽度边界就确定了,可以计算面积												

leetcode必刷题(四)lee75 颜色分类、lee76 最小覆盖字串、lee78 子集、lee79 单词搜索、lee84 柱状图中最大的矩形、lee85 最大矩形、lee96 不同的二叉搜索树、相关推荐

  1. 【进大厂的leetcode必刷题】之目录汇总

    只要看下面几个面试概率大的leetcode题目即可,二刷.三刷.四刷都行.不求题海战术,只要掌握几个经典的类型就能应付大部分面试公司. 题目实时更新中 二叉树 1.leetcode108.将有序数组转 ...

  2. 数据结构与算法--力扣108题将有序数组转换为二叉搜索树

    力扣108提将有序数组转换为二叉搜索树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫, ...

  3. 刻意练习:LeetCode实战 -- 不同的二叉搜索树

    背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是"不同的二叉搜索树 II",而LeetCode也有"不同的二叉搜索树"题目,故一起写了 ...

  4. 计算机基础知识必刷,《2019年江苏专转本考试-计算机基础必刷题题库(第四章)》...

    <2019年江苏专转本考试-计算机基础必刷题题库(第四章)> 一.判断   共3题 (共计3分) 第1题: 计算机信息系统的特征之一是处理的数据量大,因此必须在内存中设置缓冲区,用以长期保 ...

  5. 四 . LeetCode标签刷题——树/二叉树(一) 算法部分

    各种二叉树的介绍汇总: 二叉树:最多有两棵子树的树被称为二叉树 满二叉树:二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上 完全二叉树:如果一个二叉树与满二叉树前m个节点的结构相同,这样的二 ...

  6. LeetCode算法刷题目录 (Java)

    目录 1.数学基础 1.1.位运算 1.2.其它 2.数据结构 2.1.线性表 2.1.1.数组(双指针) 2.1.2.链表(双指针) 2.1.3.栈 2.1.4.队列 2.1.5.字符串 2.1.6 ...

  7. 【Leetcode】 刷题之路1(python)

    leetcode 刷题之路1(python) 看到有大佬总结了一些相关题目,想着先刷一类. 1.两数之和 15.三数之和 16.最接近的三数之和 11.盛最多的水 18.四数之和 454.四数相加II ...

  8. 3维两点间的距离 js_高考必刷题4:球面上任意两点间距离的计算

    678地理工作室,每天,6:13 678地理工作室诚邀一起合作的小伙伴 文章首发于微信公众号"老丁侃地理",欢迎关注 本文为老丁原创,引用请注明来源 第一部分:经纬网部分,考纲和知 ...

  9. LeetCode代码刷题(17~24)

    目录 17. 电话号码的字母组合 18. 四数之和 19. 删除链表的倒数第 N 个结点 20. 有效的括号 21. 合并两个有序链表 22. 括号生成 23. 合并K个升序链表 24. 两两交换链表 ...

最新文章

  1. javascript 忍者秘籍读书笔记
  2. CodeForces - 1437G Death DBMS(AC自动机fail树上树链剖分建线段树/暴跳fail)
  3. Java程序创建Kafka Topic,以及数据生产消费,常用的命令
  4. python中的引用怎么理解_python 引用和对象理解
  5. 流浪不是我的初衷 ... ...
  6. flask 中文编码解码
  7. Charm Bracelet(POJ-3624)
  8. mysql查询id为5的数据类型_MySql学习05---数据类型
  9. mixins,generics(ApiView)
  10. 单个用户OWA登陆失败,提示用户名和密码错误
  11. EXCEL 宏 拆分数据表 VBA 视频教程下载
  12. android RN开发环境搭建
  13. STM32 FreeRTOS系列教程(一)FreeRTOS简介
  14. 找到自己的优势,才能干活不累,事半功倍!
  15. OOP(面向对象)总结(有这一篇足矣)
  16. 003-Xshell和Xftp连接CentOS
  17. 【洛谷】P1567 统计天数
  18. 主板aspm关闭_bios关闭acpi的方法步骤图文详解
  19. ASP.NET WEBAPI 跨域请求 405错误
  20. 脾胃虚弱用什么中成药比较好?

热门文章

  1. Android 之UI自适应解决方案
  2. Androidstudio 最权威使用技巧, 持续更新
  3. 如何才能做好一个软件系统?
  4. 微信小程序_图片连拍_闪光灯_手电筒_录制
  5. 计算机毕业设计Java悦途旅游网(系统+程序+mysql数据库+Lw文档)
  6. Effective C++读书摘要--Accustoming Youself to C++
  7. 2021年全球灌装设备收入大约1194.6百万美元,预计2028年达到1604.7百万美元
  8. 重新开始:第一篇,创建GitHub 仓库,搭建项目基础
  9. UI设计是青春饭?今天告诉你真相!
  10. 绘制STM32最小系统电路原理图、STM32F103读取SD卡的数据