# DesignPattern **Repository Path**: ZengPeng0/DesignPattern ## Basic Information - **Project Name**: DesignPattern - **Description**: 【后端重.项目】算法练习、23设计模式及个人开发中遇到的问题记录总结... - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-07-14 - **Last Updated**: 2021-12-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DesignPattern ## 项目 简介 此项目用于分析设计模式、leetcode算法编写分析 # 内容 ### 1.字符处理 [力扣_3_无重复字符的最长子串 【题解2:滑动窗口 + 集合记录】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_3_%E6%97%A0%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%E7%9A%84%E6%9C%80%E9%95%BF%E5%AD%90%E4%B8%B2.java) [ _力扣_424_替换后的最长重复字符 【题解:窗口滑动】_ ](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_424_%E6%9B%BF%E6%8D%A2%E5%90%8E%E7%9A%84%E6%9C%80%E9%95%BF%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6.java) [力扣_434_字符串中的单词数 【题解:str.split("\\s+") 字符串替换】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_434_%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%8D%95%E8%AF%8D%E6%95%B0.java) [力扣_482_密钥格式化 【题解:StringBuilder 倒插入】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_482_%E5%AF%86%E9%92%A5%E6%A0%BC%E5%BC%8F%E5%8C%96.java) [力扣_500_键盘行 【简单的字符查找】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_500_%E9%94%AE%E7%9B%98%E8%A1%8C.java) [力扣_520_检测大写字母 题解【全大写的判断+ 首字母后的判断】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_520_%E6%A3%80%E6%B5%8B%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D.java) [力扣_1004_最大连续1的个数_3 【题解:双指针滑动窗口+ 维护k的值】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/String/%E5%8A%9B%E6%89%A3_1004_%E6%9C%80%E5%A4%A7%E8%BF%9E%E7%BB%AD1%E7%9A%84%E4%B8%AA%E6%95%B0_3.java) ### 2.算法 [力扣_1_两数之和 【题解:哈希表】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_1_%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.java) [力扣_263_丑数 【题解:结果不为1时,循环相除。 每次除以丑数 】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_263_%E4%B8%91%E6%95%B0.java) [力扣_264_丑数II 【题解:三坐标法,记录对应的最小值】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_264_%E4%B8%91%E6%95%B0II.java) [力扣_231_2的幂 【题解:循环取余2,判断是否为0】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_231_2%E7%9A%84%E5%B9%82.java) [力扣_628_三个数的最大积 【题解:排序求最大值,注意考虑max(负负负得正,最大值相乘)】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_628_%E4%B8%89%E4%B8%AA%E6%95%B0%E7%9A%84%E6%9C%80%E5%A4%A7%E7%A7%AF.java) [力扣_633_平方数之和 【题解:两端法,循环 0-- Math.sqrt(c)】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_633_%E5%B9%B3%E6%96%B9%E6%95%B0%E4%B9%8B%E5%92%8C.java) [力扣_441_排列硬币 【题解:暴力求中间值:Math.sqrt(2L*n) -1; 然后相减n-=k】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_441_%E6%8E%92%E5%88%97%E7%A1%AC%E5%B8%81.java) [力扣_643_子数组最大平均数I 【题解:记录最大值 循环变更当前值 比较】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_643_%E5%AD%90%E6%95%B0%E7%BB%84%E6%9C%80%E5%A4%A7%E5%B9%B3%E5%9D%87%E6%95%B0I.java) [力扣_645_错误的集合 【题解:数组位图,记录每个值的出现次数】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_645_%E9%94%99%E8%AF%AF%E7%9A%84%E9%9B%86%E5%90%88.java) [力扣_485_最大连续1的个数 【题解:双变量,记录当前连续、最大连续】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_485_%E6%9C%80%E5%A4%A7%E8%BF%9E%E7%BB%AD1%E7%9A%84%E4%B8%AA%E6%95%B0.java) [力扣_492_构造矩形 【题解:暴力求平方根 Math.sqrt(area)】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_492_%E6%9E%84%E9%80%A0%E7%9F%A9%E5%BD%A2.java) [力扣_648_单词替换 【题解:利用String.startsWith() 判断是否以此字符串开头,源码为循环对比字符】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_648_%E5%8D%95%E8%AF%8D%E6%9B%BF%E6%8D%A2.java) [力扣_649_Dota2参议院 【题解:循环链表--比较有意思,谁先则禁用对方,然后自己的投票机会后延+n】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_649_Dota2%E5%8F%82%E8%AE%AE%E9%99%A2.java) [力扣_704_二分查找 【题解:有序数组,对比中间】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_704_%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.java) [力扣_724_寻找数组的中心索引 【题解:先求总和total,再次遍历数组:前面数的和*2 +上当前值==total】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%9B%E6%89%A3_724_%E5%AF%BB%E6%89%BE%E6%95%B0%E7%BB%84%E7%9A%84%E4%B8%AD%E5%BF%83%E7%B4%A2%E5%BC%95.java) [力扣_961_重复N次的元素 【题解:有一半的数相等,那么排列中要么所有相同的数都不相邻,要么就必定存在相邻并相等的情形。】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_961_%E9%87%8D%E5%A4%8DN%E6%AC%A1%E7%9A%84%E5%85%83%E7%B4%A0.java) [力扣_989_数组形式的整数加法 【题解:反转相加】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_989_%E6%95%B0%E7%BB%84%E5%BD%A2%E5%BC%8F%E7%9A%84%E6%95%B4%E6%95%B0%E5%8A%A0%E6%B3%95.java) _力扣_1128_等价多米诺骨牌对的数量 【题解:? 】_ ### 3.链表与栈 [力扣_2_两数相加 【题解:构造链表、相加进位标记处理】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E9%93%BE%E8%A1%A8/%E5%8A%9B%E6%89%A3_2_%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0.java) ### 4.二叉树与排序 [力扣_501_二叉搜索树中的众数 【中序遍历 + 多值判段 + list.clear】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E4%BA%8C%E5%8F%89%E6%A0%91/%E5%8A%9B%E6%89%A3_501_%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.java) [力扣_506_相对名次 【题解: 排序Arrays.sort(), 二分查找Arrays.binarySearch(array, number)】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E6%8E%92%E5%BA%8F/%E5%8A%9B%E6%89%A3_506_%E7%9B%B8%E5%AF%B9%E5%90%8D%E6%AC%A1.java) [力扣_530_二叉搜索树的最小绝对差 【题解:中序遍历,记录上一个值、当前最小值】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E4%BA%8C%E5%8F%89%E6%A0%91/%E5%8A%9B%E6%89%A3_530_%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.java) ### 5.计算 [力扣_504_七进制数 【题解:循环除以7 取余数罢了】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_504_%E4%B8%83%E8%BF%9B%E5%88%B6%E6%95%B0.java) [力扣_507_完美数 【题解:找到平方根,前面的都是弟弟+ 相除的商(哥哥)】 ](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_507_%E5%AE%8C%E7%BE%8E%E6%95%B0.java) [力扣_509_斐波那契数 题解【三种方式:变量转移>数组记录>递归算法】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_509_%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0.java) [力扣_523_连续的子数组和 【题解:同时除以一个数,余数相同。说明差值能够整除】 --精辟](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E8%AE%A1%E7%AE%97/%E5%8A%9B%E6%89%A3_523_%E8%BF%9E%E7%BB%AD%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84%E5%92%8C.java) ### 6.动态规划 [力扣_322_零钱兑换 【题解:把1到amount的都记录起来,动态规划:通过小的来计算大的】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/%E5%8A%9B%E6%89%A3_322_%E9%9B%B6%E9%92%B1%E5%85%91%E6%8D%A2.java) [动态规划0_1背包 【题解:取舍问题f(w,c)= max( f(w-1,c - v[i])+v[i] , f(w-1,c) )】](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%920_1%E8%83%8C%E5%8C%85.java) [力扣_646_最长数对链 【题解:动态规划一维数组】--比较难](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/%E5%8A%9B%E6%89%A3_646_%E6%9C%80%E9%95%BF%E6%95%B0%E5%AF%B9%E9%93%BE.java) [力扣_650_只有两个键的键盘 【题解:动态规划+素数分解】--比较难](https://gitee.com/ZengPeng0/DesignPattern/blob/master/src/main/java/com/zpself/module/%E7%AE%97%E6%B3%95%E7%BB%83%E4%B9%A0/%E7%AE%97%E6%B3%95/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/%E5%8A%9B%E6%89%A3_650_%E5%8F%AA%E6%9C%89%E4%B8%A4%E4%B8%AA%E9%94%AE%E7%9A%84%E9%94%AE%E7%9B%98.java)