- 博客(13)
- 收藏
- 关注
原创 下一个排列
下个排列题目来源:下个排列问题描述:问题分析:根据题目及案例分析:(1). 当数组只有一个数或零个数时数组无法修改(2).当数组是降序排列时(此时该数字序列为最大) 只需要将数组反转即可转化为最小情况( 3 ).如果数组的排列非降序 ,则需要将数组重新排列,变为更大的数字序列(更大序列不是任意大,这里可以理解为 将整个数字序列进行全排列,所组成数字按大小降序排列,正好是当前数字序列对应的索引的前一个)解决办法:1 . 将一个数字序列从后往前遍历,找到一个降序的数字 , 例如 arr
2021-02-24 16:51:51
76
原创 无重字符的最长字串
无重复字符的最长字串题目来源:无重复字符的最长字串问题描述:问题分析:1.因为要获取最长子串的长度,所以需要遍历整个字符串。2.判断当前字符是否在当前子串中重复出现,所以遍历当前子串,与当前字符比较(起始位置初始为0,结束位置为当前字符的前一个。)3.如果发现当前最长子串中相同的字符,这时将当前子串的长度与当前的最大子串的长度比较,如果比当前最大子串大,则改变最大长度。然后应该对比的新子串,起始位置是前一个子串中相同位置的后一个字符(发现了相同字符,则要保证新子串中之只含有一个该字符,所以新的对
2021-01-18 20:11:30
102
1
原创 打家劫舍
打家劫舍题目来源:打家劫舍问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。问题分析:因为不能偷窃的相邻的房间,并且要让能够偷窃的金额最高,可以考虑采用动态规划的思想。新建一个数组dp,索引 i 含义为:偷到第i个房间dp[ i ]含义为:头
2021-01-13 23:52:37
96
原创 买卖股票的最佳时机II
买卖股票的最佳时机II题目来源:买卖股票的最佳时机II问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。问题分析:首先,不能同时参加多笔交易,在再次购买前出售掉之前的股票,所以这是不限交易次数的。所以可以尽可能多的进行交易,只要后面一天的股价比前一天高,就低买高卖,然后总利润相加,及是最大利润。可以画个辅助分
2021-01-12 00:20:37
82
原创 买卖股票的最佳时机
买卖股票的最佳时机题目来源:买卖股票的最佳时机问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,
2021-01-11 00:01:54
51
原创 将有序数组转换为二叉搜索树
将有序数组转换为二叉搜索树题目来源:将有序数组转换为二叉搜索树问题描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。问题分析:根据题目要求,二叉树的左右两个字数的高度差的绝对值不超过1。所以,尽量将左右子树分平均,这里可以采用分治的思想,分别对左右两边进行赋值。代码实现:与二分法思路相同package leetcode;public class Main { public st
2021-01-09 22:47:38
58
原创 算法刷题:相同的树
相同的树来源:相同的树问题描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。问题分析:由题可知,就是通过比较每个节点的值是否相同,即只需要遍历两个二叉树,采用深度优先算法即可。代码实现:public class Main {//测试 public static void main(String[] args) { // TODO Auto-generated method stub TreeNode p=nu
2021-01-08 23:17:30
158
2
原创 删除排序链表中的重复元素
删除排序链表的重复元素题目来源:删除排序链表的重复元素问题分析:因为时排序链表,所以在排序时只用考虑相邻的两个数,即在遍历链表的同时与后面一个值进行比较即可。代码实现:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution
2021-01-07 19:11:21
62
原创 罗马数字转整数
罗马数字转整数题目来源:罗马数字转整数问题描述:问题分析:该题目最麻烦的地方就是,需要考虑左右的罗马数字,进行加或减。问题解决:可以将字符串倒着遍历,这样可以只考虑做减法的时候(只需多往前验证一个即可)代码实现package leetcode;public class test13 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(
2021-01-06 18:09:18
438
3
原创 爬楼梯
爬楼梯题目来源:爬楼梯题目表述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。分析:根据题目,可以先列个表当n=3时,可以看成 一级台阶时上两步+二级台阶时上1步,及Count(3)=count(2)+count(1)。当n=4时,可以看成 二级台阶时上两步+三级台阶时上1步,及Count(4)=count(3)+count(2)。…即可以得出递推关系式:代码实现import
2021-01-05 19:50:34
168
原创 猴子吃桃问题
猴子吃桃问题题目来源:猴子吃桃问题描述:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。问题分析:(1)根据题目,每天早上都吃了前一天剩下的一半零一个,且到了第N天只剩下一个桃子。根据第N天的数量,来求总的桃子数,并且每天的数量之间都有一定的关系,所以很自然的想到使用递归来解决。(2)可以把题目倒过来想,也就是第
2020-12-16 14:42:00
452
1
原创 [蓝桥杯]最长公共子序列
最长公共子序列题目来源:最长公共子序列题目描述:给定两个字符串,寻找这两个字串之间的最长公共子序列。输入:输入两行,分别包含一个字符串,仅含有小写字母。输出:最长公共子序列的长度。问题分析:(1)最长公共子序列并非最长字串,例如:这两个字符串的最长公共子序列就是“ab”,即同一方向,两个字符串中相同字母按相同顺序所构成的序列。(2)既然首先要找出相同的元素就要挨个比较,又要计算出最大公共子序列的长度,可以采用动态规划算法。(3)将两个字符串(s1,s2)转化为字符数组,定义一个二维数组
2020-12-14 10:31:32
366
原创 算法刷题
母牛的故事问题描述:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?分析:根据题目,每头小母牛从第四个年头开始, 每年年初也生一条小母牛。可以得知,前四年,每年老母牛会生一头小母牛,到了第5个年头,第2年的小母牛就开始生小牛(第二年的所有牛都可以生小母牛),第6年的时候,第3年的所有母牛也可以再生小牛…列表可知:即小母牛满三岁则能生育,因此得出,数量关系代码实现: import java.util.
2020-12-09 20:09:47
392
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人