
Leetcode
plugcy
精通数据库
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode——通过删除字母匹配到字典里最长单词
题目描述:给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。解题思路:先取出最长的字符串,并且字典顺序最小的字符串对于列表中的字符串,一个一个的判断其和目标串之间是否满足该关系:目标串删除部分字符可以得到该串class Solution { publ...原创 2018-07-02 20:27:16 · 1567 阅读 · 0 评论 -
Leetcode——字符构成最多的字符串
题目描述:在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。解题思路:这相当于是一个多维费用背包,也就是不仅要考虑背包所能容纳的重量,还要考虑背包的体积 ...原创 2018-07-22 21:41:47 · 904 阅读 · 0 评论 -
Leetcode——组合总和
用深信服的一个问题来引出此题:题目描述: 给定一堆题目所对应的分值,请你从中挑选一些题目,使其分值正好是一百分解题思路:将分值一个个加到一个列表中,一旦找到就输出列表 否则将所有元素加入列表后,将其回溯,加入下一个元素 可以在加入元素大于所要的100以后,就回溯import java.util.List;import java.util.ArrayList;/*给定一堆题目...原创 2018-07-22 11:24:15 · 840 阅读 · 0 评论 -
完全背包问题
完全背包完全背包和01背包的区别在于完全背包每一件物品的数量都有无限个,而01背包每件物品数量只有1个状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i][j-a[i]]+v[i])or dp[j] = max(dp[j],dp[j-a[i]]+v[i])对于第i件物品有放或不放两种情况,而放的情况里又分为放1件、2件、......v/c[i]件...原创 2018-07-21 23:08:57 · 200 阅读 · 0 评论 -
Leetcode——零钱兑换
题目描述:给一些面额的硬币,要求用这些硬币来组成给定面额的钱数,并且使得硬币数量最少。硬币可以重复使用。解题思路:把该题目抽象成一个背包问题 物品:硬币 物品大小:面额 物品价值:数量 因为硬币可以重复使用,因此这是一个完全背包问题。 class Solution { public int coinChange(int[] coins, int amount) {...原创 2018-07-21 10:57:44 · 1064 阅读 · 0 评论 -
Leetcode——单词拆分
题目描述:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 字典中的单词没有使用次数的限制,因此这是一个完全背包问题。 class Solution { public boolean wordBreak(String s, List<String> wordDict) { ...原创 2018-07-21 10:56:37 · 716 阅读 · 0 评论 -
leetcode——排列
题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。解题思路:典型的回溯法解题思想 给定一个列表,将数组中的数字加入该列表中,一旦列表的大小等于数组的长度时,保存该列表作为数组的一个排列 同时添加过的数字要给一个标签,说明已加入该列表 当列表大小等于数组长度时,保存的同时,需要回退,同时将该数字的标志置为未访问 class Solution { pub...原创 2018-07-25 23:35:02 · 189 阅读 · 0 评论 -
Leetcode——分割等和
题目描述:给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。解题思路: 可以看成一个背包大小为 sum/2 的 0-1 背包问题。 class Solution { public boolean canPartition(int[] nums) { int sum = sum(nums); if(su...原创 2018-07-19 23:47:07 · 1382 阅读 · 0 评论 -
Leetcode——打家劫舍 II
题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。解题思路:所有的房屋围成一圈,所以所有房子头...原创 2018-07-24 23:43:59 · 241 阅读 · 0 评论 -
Leetcode——验证回文字符串
题目描述:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。解题思路:使用双指针,一个指向头,一个指向尾,如果两者不相同了,则可以将尾部的往前挪一个,或者首部的往后挪一个,判断这两种情况这两种已经相当于删除了一个字符,如果不是回文字符串,说明删除一个字符满足不了要求class Solution { public boolean validPalindrome(String...原创 2018-06-28 23:51:12 · 1293 阅读 · 0 评论 -
Leetcode——最长上升子序列
题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。解题思路:以一个例子为例:2 3 1 5 4 7 9 对于2,最长递增子序列为1 对于3,最长递增子序列为2 而对于1,最长递增子序列为2,3,但该处因为相当于和前面的断开了,所以应该定义此处的最长递增子序列为1 对于5,如果和前面的1连接,最长递增子序列为1,5,长度为2;如果和前面的3连接,最长递增子序列为2,3,...原创 2018-08-01 23:01:10 · 677 阅读 · 0 评论