自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

softstarhhy的专栏

盖世英雄

  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 LintCode第476题-石子归并V(区间型)

再开始当前题以前需要了解到 贪心算法和动态规划的区别相同点:都要求最优子结构不同点:贪心算法说明的是做出局部最优选择不会影响后续选择或整体最优但是石子归并并不符合贪心算法的要求 因为这个策略在「哈夫曼编码」那类不限顺序合并的场景有效,但本题必须合并相邻石堆限制了合并顺序,这导致贪心不能保证全局最优,即相邻的合并顺序会影响到后续的选择而不像贪心算法一样不会影响后续的旋转举例:输入: [3, 4, 3]

2025-04-15 13:46:47 560

原创 LintCode第76题-最长上升子序列

且该题不为组合问题 因为是找最长子序列 为路径问题 一般路径问题不会进行重复 为什么不会重复呢 因为路径只走一次 即使数组中有重复的数字 但取路径的时候只会将相同的元素取一次。最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的。即该题可以这样理解:该题中dp[i]的值是以判断nums[j]的大小来决定路径的长度是否要更新。//取当前的某一个具体的dp[m]最长子序列路径。

2025-04-14 11:55:09 285

原创 LintCode第563题-(0,1)背包问题即不可重复背包问题

即假设dp[3] 即跳到第三阶的组合可以是先dp[1]后dp[2] 或者是先dp[2]后dp[1] 即。├── dp[2] + 2 → 有 2 种跳到 dp[2] 的方式,加一个 2阶。└── dp[1] + 3 → 有 1 种跳到 dp[1] 的方式,加一个 3阶。dp[0] = 1;则dp[3] = dp[2] + dp[1] + dp[0]则dp[4] = dp[3] + dp[2] + dp[1]

2025-04-13 02:57:27 513

原创 LintCode第652题-因式分解(非递归版)

常见的错误是:以12为例当回溯是 2 2 3 回到上一个节点2 此时右子树是6 如果不回到12的根节点 那么遍历的路径就会有缺失即右边的 12 -3 -4缺失。即没有回溯每个分支的状态 即只记录了最大的深度而没有但没有回溯过程 但并没有将每个分叉点的信息(比如:当前除以多少、从哪个数字开始)压栈,从而没法回退。我们在遍历的时候 通常会采取先试着用小的数 然后逐步增大的策略,但这里要注意的是回溯的时候一定最后每轮要回溯到根节点然后再使用比刚才更小的数进行尝试。即较小的因子小于等于较大的因子。

2025-04-12 02:34:46 661

原创 LintCode第127-拓扑排序

3.将队列的节点依次出队 每次出队一个节点 然后记录在结果的数组中 并更新邻接节点的入度。树的层序遍历是BFS的一种具体应用形式,即广度优先搜索在树结构上的特化。拓扑排序中的第一个节点可以是图中的任何一个没有其他节点指向它的节点.遍历顺序:从起点开始,先遍历“距离近的”,再遍历“距离远的”// 将所有入度为 0 的节点入队。针对给定的有向图找到任意一种拓扑排序的顺序.// 用于记录每个节点的入度。5.最终返回结果的数组 即拓扑排序的结果。// 记录拓扑排序的结果。您只需要返回给定图的任何一种拓扑顺序.

2025-04-07 00:13:02 691

原创 LintCode第974题-求矩阵各节点的最短路径(以0为标准)

然后通过两个变量 path来记录路径的长度 队列来记录为未满足为0的位置索引 每次判断但凡队列的点相邻但凡没有一个符合条件就先让path+1。然后记录所有不符合的点 直至循环出相邻有0的点 因为题目已经告知给定的矩阵至少有一个0。// 当前单元格的路径。// 将所有为0的点入队,作为BFS的起点。给定一个由0和1组成的矩阵,求每个单元格最近的0的距离。

2025-04-04 15:27:07 966

原创 LintCode第902题-BST(二叉搜索树)中第K小的元素

思路:由于为BST树 那么 可以先用一个list来统计出 然后直接取索引为k-1的值即为目标值。优化思路:中序遍历的时候同时计数 即可提前返回(节省空间)函数来找到其中第 K 小的元素。给一棵二叉搜索树,写一个。

2025-04-03 16:12:29 293

原创 LintCode第67题-二叉树的中序遍历(非递归版)

递归用的是 Java 自带的 系统调用栈(call stack) 来 隐式记录节点的访问状态。非递归用的是: 程序员自己创建的 Stack 对象 来 显式记录节点的访问状态。// 3. 处理右子树(开始新的左下压入过程)// 一直往左走,把沿途的节点压入栈。//弹出栈顶元素(中间节点) ,加入结果。因为节点 3 没有被访问 所以不符合中序遍历的要求。在弹出的时候不应该直接弹出节点,而是应该把。它将被序列化为{1,#,2,3}中序遍历。它将被序列化为{1,2,3}中序遍历。3)转向右节点(再左走入栈)

2025-04-03 15:47:38 708

原创 LintCode第95题-验证二叉查找树

但BST(二叉排序树)是整棵左子树的所有值都要 < 当前节点值,整棵右子树所有值都要 > 当前节点值。// 上一个访问的节点。第一个问题:遍历的时候是否可以用先序遍历或者是后序遍历 理论上是可以的 但实际上很麻烦。节点 8 的左孩子是 4,但 4 < 5,这个不合法 这是由于忽略了整个树的结构导致的。第二个问题:为什么中序遍历不需要判断左右两边的大小 只需要当前节点与上一个节点作比较呢。直接判断左子树的节点值小于根节点值 右子树的节点值大于根节点的值。这只能判断 当前节点是否满足和直接子节点的关系。

2025-04-03 01:51:50 743

原创 LintCode第94题-二叉树中的最大路径和

/ 用于记录最大路径的节点。给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)2.当前节点做拐点,同时连接左右子树 + 自己,尝试更新最大路径和 并更新当前的最大路径和。// 当前节点为“拐点”的路径值:左 + 当前 + 右。// 当前节点为“拐点”的路径值:左 + 当前 + 右。// 返回给父节点的最大贡献路径(只能向上走一边)// 返回以当前节点为根的最大单边路径(只能向上传)// 返回以当前节点为根的最大单边路径(只能向上传)

2025-04-02 16:31:40 422

原创 LintCode第1534题-将二叉搜索树转换为已排序的双向链接列表

双向链表中的每个节点都有一个前任和后继。对于循环双向链表,第一个元素的前导是最后一个元素,最后一个元素的后继是第一个元素。2.由于为中序遍历 那么要在递归右子树前就要把前两个节点即当前的节点和前驱节点找到并相互链接,并通过右子树来遍历来判断是否有后续节点.转换后,树节点的左指针应指向其前一个指针,右指针应指向其后继指针。可以将左右指针视为双向链表中上一个和下一个指针的同义词。“head”符号表示它指向的节点是链表的最小元素。//通过中序遍历将其变为按大小顺序递增的循环双向链表。下图显示了转换后的BST。

2025-03-26 16:23:39 563

原创 LintCode 第64题合并排序数组(简单版)

描述合并两个排序的整数数组A和B变成一个新的数组。原地修改数组A把数组B合并到数组A的后面。解释:经过合并新的数组为[1,2,3,4,5]解释:经过合并新的数组为[1,2,3,4,5]思路:题目中要求原地排序,则不能从新建一个数组用来记录A数组和B数组的比值并写入应该采用双指针,从后往前原地合并。

2025-03-24 16:11:20 391

原创 LintCode第627题-最长回文串

如果是统计已知该字符串是回文数 统计最长的子回文数字符串 那么就应该使用背向双指针法来统计最长的子回文数字符串。给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。都是统计每个字符出现次数,然后累加偶数部分,遇到奇数只取。将这数的位数反转排列得到的“倒序数反序数和原数一样。来判断是否存在奇数个字符,用于最后。数据是大小写敏感的,也就是说,并不会被认为是一个回文串。,最后最多加一个中心字符。

2025-03-24 13:31:12 123

原创 LintCode第1712题 - 和相同的二元子数组

描述在由若干0和1组成的数组A中,有多少个和为S的子数组思路1 采用同向双指针法 通过暴力双指针枚举所有起点 + 滑动右指针每轮固定左指针 left,右指针从 left 向右滑动;每次累加和,如果等于 S,就记录这个子数组;关键点是从每个 left 出发,向右滑,不能随便跳过任何一个组合代码1:left < n;left++)//同向双指针法计算是否为目前值Sright < n;break;// 再滑动右指针没意义了思路2 前缀和 + 哈希表。

2025-03-22 23:40:38 958

原创 LintCode第460题-书籍复印

贪心判断是否可以完成任务 (canDivide 方法) 判断是否可以在“每个人最多抄 midPages 页”的前提下,把书分配给 ≤k 个人: 从头遍历 pages[];确定搜索范围(最小页数 ~ 最大页数) 最小可能页数 minPages:数组中页数最多的那本书(因为任何一个人都至少要能抄这本书) 最大可能页数 maxPages:数组中所有页数的总和(只有一个人抄完全部书的情况)// 当前这本书分给新的人。//已经找出最小的数和最大的数 利用贪心算法判断 找出最小的k个人可以完成复制n本书的工作量。

2025-03-22 14:30:53 367

原创 LintCode多关键字排序

描述 给定 n 个学生的学号(从 1 到 n 编号)以及他们的考试成绩,表示为(学号,考试成绩),请将这些学生按考试成绩降序排序,若考试成绩相同,则按学号升序排序。if (array[j][1] > array[j - 1][1]) { // 成绩降序排序。对二维数组进行排序时,每一行的比较逻辑都需要返回一个整数值,来告诉排序算法两个元素的相对顺序。// 比较两个元素 a 和 b。

2025-03-21 17:56:17 476

原创 LintCode 第460题在排序数组中找最接近的K个数

从左右指针中选出 更接近 target 的数 每次比较 A[left] 和 A[right] 到 target 的差值 取较近的数放入结果数组 直到选满 k 个。while(k>0) //在k次中比较每个数与target的接近程度。//避免无限循环 只会执行k次 即找到最接近的k个数。//用来记录最接近target的索引。1.第一步由于已知给定的数组的有序递增的数组 数组由于为线性结构。题中处理相同的学生成绩的时候取最从小到大的学号的处理方法是一样的。// 继续找最左端相等的值的下标索引 即数组指针。

2025-03-21 14:22:45 264

原创 二分查找和LintCode第14题

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。为该题目的关键点 如果题目要求返回最右侧的和target值相等的的数组的索引 那么应该是 result=mid;答案是可以的 可以使用二分查找,即使有序数列中包含重复元素 但是需要注意题目的要求是返回哪个索引。那么引出一个问题 二分查找如果是有序的数列有重复的元素 还能使用二分查找吗。//代码需要注意的地方在于 该题目要求的是。给定一个排序的整数数组(升序)和一个要查找的整数。返回最左侧的和target值相等的的数组的索引。

2025-03-20 18:26:50 317

原创 堆排序的思路与常见的问题

构建大顶堆需要同时满足左子树和右子树小于堆顶的元素 若从A[0]开始进行遍历 并且开始递归 只能保证一侧的子树满足要求 而不能保证左子树和右子树同时满足 因为堆排序是类似于完全二叉树的结构 所以需要进行从最后一个非叶子节点 i = (n-1)/2 开始,依次向上调整堆,保证每个子树都符合最大堆的定义,最终整个数组成为一个合法的最大堆.但 堆的其他部分(A[1] ~ A[j-1])仍然是最大堆,只有 A[0] 可能破坏堆结构。只让 A[0] 下沉,保持 A[0] ~ A[j-1] 的最大堆性质。

2025-03-19 17:29:16 770

原创 理解冒泡排序

在待排序的一组数中,将相邻的两个数进行比较,若前面的数比后面的数大就交换两数,否则不交换;如此下去,直至最终完成排序.swapped) { // 如果某一轮没有发生交换,说明数组已排序好,提前终止。// 标记是否发生交换。相邻元素 把最小的数推到前面 (本文是以从小到大的顺序进行排列)swapped = true;// 发生交换,继续排序。其中关键点在于两层循环 每层循环都有不同的意义。// 立即跳出整个外层循环。内层循环则是从后往前比较。

2025-03-19 05:18:10 160

原创 归并排序的思路与实现

├── merge(A, 0, 7, temp) // 合并 [4, 5, 7, 8] 和 [1, 2, 3, 6]│ ├── merge(A, 0, 3, temp) // 合并 [4, 8] 和 [5, 7]│ ├── merge(A, 4, 7, temp) // 合并 [1, 3] 和 [2, 6]│ │ ├── merge(A, 4, 5, temp) // 合并 [1] 和 [3]│ ├── mergeSort(A, 4, 5) // 处理 [1, 3]

2025-03-18 18:02:58 612

原创 快速排序之Hoare Partition法的递归实现

就是最终的位置 因为 左右子区间都相等了 只有一个元素 也就确认了最终的位置 类似于 二叉树的前序遍历 而Hoare Partition确认最终位置类似于数学中的夹逼原理 下面代码就是每一次都会确认正确的左右子区间 左区间是小于pivot的值 这里以int pivot=A[left];[1 2 5 3 7 8 6 9] 我们可以看到 一轮遍历并不能将6放到最终位置 但已经正确放入的右子区间即 [7 8 6 9]而left=4 即A[4]=6 执行完后 left=right=4;

2025-03-18 13:22:46 263

原创 Access简单应用

对比Access和mysql数据库,以及简单应用

2023-07-16 16:50:53 315

原创 java Calendar获取某一年的所有月份并获得对应每个月的第一天 最后一天时间

for (int i = 1; i <=12 ; i++) { //获取当年的12个月份 Date startDate = new Date(); Date endDate = new Date(); startDate=getFirstDayOfMonth(currentYear,i+""); endDate=getLastDayOfMonth(currentYear,i+"");}//获取目标年份中目标月的第一天的开始时间public...

2022-04-24 17:27:19 1985

原创 was altered from xxx to null; nested exception is org.hibernate.HibernateException

was altered from xxxto null; nested exception is org.hibernate.HibernateException直接上干货:在使用JPA时 如果使用的保存方法在保存数据库已存在的对象时,而这时你将数据库的已存在的数据传过来并使其主键id为null 这时如果调用JPA的修改方法就出出现这个错误 .解决办法 在一个事务中当使其主键id为null调用JPA自带的save方法而不是update方法...

2021-11-05 09:32:54 3163 1

原创 org.hibernate.HibernateException: identifier of an instance 错误可能出现的情况

最近在使用hibernate jpa中出现了该错误org.hibernate.HibernateException: identifier of an instance 并且反复检查没有映射没有任何问题最后发现问题竟然是主键的问题 比如我在一个合同对象中包含一个附件即1对1的关系 那么该合同的主键id假如在丢失后,进行插入不会有问题 无非是一个是JpaRepository进行保存操作一个是修改操作 区分是通过主键的id 但是如果后续附件要关联上合同的外键 那么当合同的主键丢失后 hibernat...

2021-10-04 23:39:01 2932

原创 1200 · 相对排名

描述根据N名运动员的得分,找到他们的相对等级和获得最高分前三名的人,他们将获得奖牌:“金牌”,“银牌”和“铜牌”。N是正整数,并且不超过10,000。所有运动员的成绩都保证是独一无二的。样例例子 1:输入: [5, 4, 3, 2, 1]输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]说明:前三名运动员获得前三名最高分,因此获得“金牌”,“银牌”和“铜牌”。对于后两名运动员,你只需要根据他们的分数输出他

2021-06-29 23:01:36 161

原创 lintcode算法题之219-在排序链表中插入一个节点

219.在排序链表中插入一个节点在链表中插入一个节点。样例样例 1:输入:head = 1->4->6->8->null, val = 5输出:1->4->5->6->8->null样例 2:输入:head = 1->null, val = 2输出:1->2->null代码区:/**...

2020-04-02 00:05:08 270

原创 lintcode算法题之228-链表的中点

228.链表的中点找链表的中点。样例样例 1:输入: 1->2->3输出: 2 样例解释: 返回中间节点的值样例 2:输入: 1->2输出: 1 样例解释: 如果长度是偶数,则返回中间偏左的节点的值。 代码区:/*** Definition for ListNode* public class ListNode {...

2020-03-24 19:43:11 141

原创 lintcode算法题之822-相反的顺序存储

822.相反的顺序存储给出一个链表,并将链表的值以倒序存储到数组中。样例样例1输入: 1 -> 2 -> 3 -> null输出: [3,2,1]样例2输入: 4 -> 2 -> 1 -> null输出: [1,2,4]代码区:/*** Definition for ListNode* public class...

2020-03-10 22:12:48 200 1

原创 lintcode算法题之1095-最大的交换

1095.最大的交换给定一个非负整数, 你可以选择交换它的两个数位. 返回你能获得的最大的合法的数.样例样例1:输入: 2736输出: 7236解释: 交换数字2和数字7.样例2:输入: 9973输出: 9973解释: 不用交换.代码区:public class Solution { /** * username:softs...

2020-03-10 22:06:53 171

原创 lintcode算法题之1662-中位数下标

1662.中位数下标给出一个含有n个互不相等整数的无序数组,找到其中中位数的下标。下标从 0 开始。中位数是指这些数排序后最中间的数。若n为偶数,则中位数是数组排序后的第n/2个数。样例样例 1:输入:[4,5,1,2,3]输出:4样例 2:输入:[7,9,4,5]输出:3代码区:public class Solution {...

2020-03-01 22:34:37 305

原创 lintcode算法题之846-多关键字排序

846.多关键字排序给定n个学生的学号(从1到n编号)以及他们的考试成绩,表示为(学号,考试成绩),请将这些学生按考试成绩降序排序,若考试成绩相同,则按学号升序排序。样例样例1输入: array = [[2,50],[1,50],[3,100]]输出: [[3,100],[1,50],[2,50]]样例2输入: array = [[2,50],[1,5...

2020-03-01 02:31:07 170

原创 lintcode算法题之521-去除重复元素

给一个整数数组,去除重复的元素。你应该做这些事1.在原数组上操作2.将去除重复之后的元素放在数组的开头3.返回去除重复元素之后的元素个数样例例1:输入:nums = [1,3,1,4,4,2]输出:[1,3,4,2,?,?]4解释:1. 将重复的整数移动到 nums 的尾部 => nums = [1,3,4,2,?,?].2. 返回 nums 中唯一...

2020-02-28 19:12:53 240

原创 lintcode算法题之209-第一个只出现一次的字符

给出一个字符串,找出第一个只出现一次的字符。样例样例 1: 输入: "abaccdeff" 输出: 'b' 解释: 'b' 是第一个出现一次的字符样例 2: 输入: "aabccd" 输出: 'b' 解释: 'b' 是第一个出现一次的字符代码区:public class Solution { /** *username:so...

2020-02-28 15:10:28 170

原创 lintcode算法题之157-判断字符串是否没有重复字符

实现一个算法确定字符串中的字符是否均唯一出现样例样例 1:输入: "abc_____"输出: false样例 2:输入: "abc"输出: true代码区:public class Solution { /* *username:softstarhhy * @param str: A string * @retu...

2020-02-28 15:10:04 161

原创 lintcode算法题之147-水仙花数

47.水仙花数水仙花数的定义是,这个数等于他每一位数上的幂次之和见维基百科的定义比如一个3位的十进制整数153就是一个水仙花数。因为 153 = 13+ 53+ 33。而一个4位的十进制数1634也是一个水仙花数,因为 1634 = 14+ 64+ 34+ 44。给出n,找到所有的n位十进制水仙花数。样例样例 1:输入: 1输出: [0,1,2,3,4...

2020-02-28 15:09:44 345

原创 lintcode算法题之920-会议室

920.会议室给定一系列的会议时间间隔,包括起始和结束时间[[s1,e1],[s2,e2],…(si < ei),确定一个人是否可以参加所有会议。样例样例1输入: intervals = [(0,30),(5,10),(15,20)]输出: false解释:(0,30), (5,10) 和 (0,30),(15,20) 这两对会议会冲突样例2输入: in...

2020-02-28 15:09:28 402

原创 lintcode算法题之142-O(1)时间检测2的幂次

142.O(1)时间检测2的幂次中文English用 O(1) 时间检测整数n是否是2的幂次。样例Example 1: Input: 4 Output: trueExample 2: Input: 5 Output: false代码区:class Solution { /* * @param n: An integer ...

2020-02-27 17:04:05 448

原创 lintcode算法题之141-x的平方根

实现int sqrt(int x)函数,计算并返回x的平方根。样例样例 1: 输入: 0 输出: 0样例 2: 输入: 3 输出: 1 样例解释: 返回对x开根号后向下取整的结果。样例 3: 输入: 4 输出: 2代码区:class Solution { /** *username:softstarhhy * @pa...

2020-02-27 17:01:38 183

eclipse色彩配置

省去了大家配色的麻烦,参考的是绿色背景的配色方案,参考网址http://jingyan.baidu.com/article/d5a880eb6c4f7813f147ccef.html

2015-07-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除