代码编织梦想

【算法】【动态规划】LCP 14. 切分数组-爱代码爱编程

这道题,我最开始的想法是解决两个问题: 1、得到两个数的公约数; 2、确保区间最大; 实现不了,因为这是很暴力的解法。 答案: 1、局部最优得到全局最优 —> 动态规划 2、从左至右遍历元素 3、根据他们的公约数,存储其答案;dp存储的内容为:某个公约数当前的分区个数。(很拗口啊) public class Solution { publ

【算法】1044. 最长重复子串-爱代码爱编程

1044. 最长重复子串 阅读大佬的写法后,发现这道题需要解决的是两个问题: 1、用较少的次数确定答案的字符串长度; 2、快速确定两个字符串是否相同; 错误想法: 我一开始的想法是类似于KMS的想法,先得到所有的相同字母出现的位置,然后再一一进行滑动窗口进行匹配。这个想法没有实现,因为不可能实现成功他,太复杂了。这个想法只解决了确定两个字符串的起始位置,

【算法】【感悟】LCP 03. 机器人大冒险-爱代码爱编程

当面试官问我场景题、算法时,他们不希望看到我直接上手就写。 他们想慢慢的让我自己思考、与面试官交谈。 说出对这道题的理解。LCP 03. 机器人大冒险 如下: 这道题,它的目的是求出机器人是否能够安全到达终点。 其中只需要判断:1、机器人能到达终点;2、机器人不会撞墙 思路最简单的方法是:模拟机器人,一步一步的走。当撞墙或者远离终点时,就返回false。

【算法】689. 三个无重叠子数组的最大和-爱代码爱编程

1、我的解题思路 1、从左到右,存储每一个区间的值。 2、dfs,回溯遍历,组合,找到最优解 int[] res = new int[3]; int max = 0; public int[] maxSumOfThreeSubarrays(int[] nums, int k) { int len = nums.length; in

【算法】1062. 最长重复子串-爱代码爱编程

1062. 最长重复子串 示例 1: 输入:“abcd” 输出:0 解释:没有重复子串。 示例 2: 输入:“abbaba” 输出:2 解释:最长的重复子串为 “ab” 和 “ba”,每个出现 2 次。 示例 3: 输入:“aabcaabdaab” 输出:3 解释:最长的重复子串为 “aab”,出现 3 次。

【逻辑思考】一堆硬币中有一个假币,你有一个天平,用最小的比较次数,判断假币更轻还是更重-爱代码爱编程

求和函数 public int sum(int[] weights,int start,int end){ int res = 0; for(;start<=end;start++){ res+=weights[start]; } return res; } 核心内容(全是if、else,最深是三

Java代码实现循环队列-爱代码爱编程

循环队列结构 队列特点 队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一

Java代码实现栈结构-爱代码爱编程

栈结构 栈(Stack)是一种线性存储结构,它具有如下特点 栈中的数据元素遵守”后进先出”(First In Last Out)的原则,简称FILO结构。限定只能在栈顶进行插入和删除操作。相关概念 栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。压栈:栈的插入操作,叫做进栈,也称压栈、入栈。弹栈:栈的删除操作,也叫做出栈。栈的应用场

Java代码实现ArrayList-爱代码爱编程

ArrayList结构图 ArrayList特点 ArrayList的优点如下: ArrayList 底层以数组实现,是一种随机访问模式。因此查找的时候非常快。ArrayList 在顺序添加一个元素的时候非常方便。ArrayList 的缺点如下: 删除元素的时候,需要做一次元素复制操作。如果要复制的元素很多,那么就会比较耗费性能。插入元素的时候

力扣算法之路:7. 整数反转-爱代码爱编程

题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入:x = -123 输出:-321 解法: class Solution {

力扣算法之路:1. 两数之和-爱代码爱编程

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target

Java代码实现双向链表-爱代码爱编程

双向链表结构图 特点 双向链表:有两个指针,一个指向前一个节点,一个后一个节点。 优点:可以找到前驱和后继,可进可退; 缺点:增加删除节点复杂,需要多分配一个指针存储空间。 适用于需要双向查找节点值的情况,比如MySQL的Innodb存储引擎下的索引结构B+树的叶子节点与叶子节点之间就是适用的双向链表结构。 Java代码实现双向链表 pu

力扣算法之路:2. 两数相加-爱代码爱编程

题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342

【算法】【动态规划】最长回文子序列、打家劫舍、求第几位公倍数-爱代码爱编程

文章目录 [516. 最长回文子序列](https://leetcode-cn.com/problems/longest-palindromic-subsequence/)[730. 统计不同回文子序列](https://leetcode-cn.com/problems/count-different-palindromic-subsequence

【算法与数据结构】【力扣所有股票题】状态转移、动态规划-爱代码爱编程

文章目录 想说的话[121. 买卖股票的最佳时机](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/)做法一:状态解法、动态规划(4ms)每次的当前每个状态都是最优做法二:暴力解法、贪心算法,每次得到最优解(1ms)[122. 买卖股票的最佳时机 II](https:

【算法&面试】并查集开干!-爱代码爱编程

记录并查集的原因 这三天,做了两道并查集的题,力扣签到题,两道都没做出来。每次都是基本思路有了,但是实现的时候,要么是脑海中没有找到合适的数据结构,要么就是感觉的选中的数据结构缺了点什么。上次做并查集题的时候,由于突然有点急事就放下了,今天,我再次遇到了这种类型的题。 此时我意识到,这道题对我而言,是一道好题!可以让我再次得到一种套路,一种数据结构思维

【算法&面试】DFS深度优先搜索,回溯套路-爱代码爱编程

拿一道题力扣面试题 04.09. 二叉搜索树序列 void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素) { 处理结点; backtracking(路径,选择列表)); // 递归

【算法&面试】分治算法 归并 递归 力扣 493. 翻转对 327. 区间和的个数-爱代码爱编程

分治算法是啥? 分治算法也有动态规划和贪心算法的概念,动态规划:把大问题分解成一步一步的小问题,递归解决。贪心算法:每次得到局部最优解。 分治算法:把大问题分解成小问题,汇总所有小问题的结果。快排、二分查找都是典型的分治算法。 JDK中的Fork-Join就是一个典型的并行的分治框架。它的主要作用是把大任务分割成若干个小任务,再对每个小任务得到的结果

【算法&面试】贪心算法 力扣 995. K 连续位的最小翻转次数-爱代码爱编程

995. K 连续位的最小翻转次数 来源:力扣(LeetCode) 在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。 返回所需的 K 位翻转的次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。 示例 1: 输入:A = [

【面试&算法】 42.最后的胜者-爱代码爱编程

概述: 现在有n个魔法师(2<=n<=100000),这n个魔法师都有自己的魔法值ai(1<=ai<=1000000000),他们为了证明自己是最强的魔法师便开始了争夺战,任意一个魔法师都可以对其他的魔法师发起攻击,每次攻击,被攻击的魔法师损失掉的魔法值是攻击者当前的魔法值,当魔法值小于等于0的时候淘汰出局,问最后只剩下一名魔法师时