自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 2 个动态规划的问题

1、工作安排:简单任务价值li,复杂任务价值hi。(1)团队如果在第i周执行复杂任务,需在第i-1周不做任何任务专心准备。(2)如果在第i周执行简单任务, 不需要提前做任何准备。返回未来N周的最大价值。N=4nums =[[10,5],[1,50],[10,50],[10,1]]def solution(nums,n): dp = [0]*(n+2) for i in range(2,n+2): dp[i] = max(dp[i-1]+nums[i-2][0],dp[i-2]+nums[

2020-08-21 14:55:35 78

原创 动态规划 最长公共子序列 & 最长公共子串

1143 最长公共子序列 (有顺序,不连续)输入:text1 = “abcde”, text2 = “ace”输出:3解释:最长公共子序列是 “ace”,它的长度为 3。def longestCommonSubsequence(self, text1: str, text2: str) -> int: n = len(text1) m = len(text2) dp=[[0 for _ in range(m+1)]for _ in range(

2020-08-21 09:50:59 73

原创 动态规划 序列

300 最长上升子序列输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。def lengthOfLIS(self, nums: List[int]) -> int: if not nums: return 0 n = len(nums) dp = [1 for i in range(n)] #dp[i] 所有元素置 1,含义是每个元素都至少可以单独成为子

2020-08-21 09:33:03 169

原创 0-1背包问题 零钱兑换

1、不限定硬币个数去组合硬币达到的指定的值。dp[[j] 表示遍历到当下这个硬币时,组成金额j的方法数目。i:代表硬币的可取的种类数j:代表当前的金额def waysToChange(n): mod = 100000007 coins =[1,5,10,25] dp = [0]*(n+1) dp[0]=1 #形成金额0的组合数为1表示,只有一种方案,1枚也不选 for i in range(len(coins)): for j in range(n+1): if j &

2020-08-20 22:41:08 186

原创 二分法 搜索旋转排序数组

leetcode33:搜索旋转排序数组(无重复元素)假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你的算法时间复杂度必须是 O(log n) 级别。(二分法)输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4def search(nums,target) : if n

2020-08-12 12:32:20 79

原创 二分法 寻找旋转数组中的最小值

leetcode: 153 寻找旋转数组中的最小值(无重复元素)假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。输入: [3,4,5,1,2]输出: 1 def findMin(nums): left = 0 right = len(nums)-1 while left <= right: mid

2020-08-12 12:24:24 55

原创 二分法 x的平方根&快速幂

leetcode 69:x的平方根def mysqrt(x): if x<2: return x left = 0 right = x//2 while left<=right: mid =(left+right)//2 num = mid*mid if num>x: right = mid -1 elif num <x: left = mid+1 else: return mid return rightleetcode 50

2020-08-12 12:18:02 62

原创 二分法 找出第K小的距离对

leetcode719:找出第K小的距离对给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。输入:nums = [1,3,1]k = 1输出:0解释:所有数对如下:(1,3) -> 2(1,1) -> 0(3,1) -> 2因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。def smallestDistancePair( nums, k ) : def poss

2020-08-12 12:06:18 82

原创 二分法 有序矩阵中第K小的元素

leetcode 378题目:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8,返回 13。def kthSmallest( matrix ,k): n = len(matrix) def search(mid): # 记录矩阵中小于等于mid的个数

2020-08-12 12:02:10 67

原创 二分法 乘法表中第K小的数

题目:给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。输入: m = 3, n = 3, k = 5输出: 3解释:乘法表:1 2 32 4 63 6 9第5小的数字是 3 (1, 2, 2, 3, 3).思路: 二分法查找第K个数,边界[1,m*n],假设目标数是tar,tar必须满足比tar小的个数<k个。注意:(1)普通的二分法是以数组下标为边界,而这里的二分法是以值为边界。(2)通过找出乘法表中<=mid的个数(coun

2020-08-12 11:55:38 201

原创 二分法 吃香蕉

题目:珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。思路:二分法:最少吃1根香蕉,最多吃堆中香蕉最多大的数目。用count记录小时数

2020-08-12 11:26:56 202

空空如也

空空如也

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

TA关注的人

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