草庐IT

【LeetCode刷题】1. 两数之和

1.两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15],target=9输出:[0,1]解释:因为nums[0]+nums[1]==9,返回[0,1]。示例2:输入:nums=[3,2,4],target=6输出:[1,2]示例3:输入:nums=[3,3],target=6输出:[0,1]提示:2-109-109只会存在一个有效答案解法一:暴力匹配代码拿我

leetcode 300. Longest Increasing Subsequence 最长递增子序列 (中等)

一、题目大意标签:动态规划https://leetcode.cn/problems/longest-increasing-subsequence给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101],因此长度为4。示例2:输入:nums=[0,1,0,3,2,3]输出:4示例3:输入:nums=[7,7,7,7,7,7,

Python装饰器实例讲解(一)

Python装饰器实例讲解(一)多种角度讲述这个知识,这是个系列文章但前后未必有一定的顺承关系部分参考网络本文以一个小案例引出装饰器的一些特点,不涉及理论,后面再谈案例写一个代码来求一个数是否是质数defis_prime(x):ifx==2:returnTrueelifx==1orx%2==0:returnFalseforiinrange(3,int(x**0.5)+1,2):ifx%i==0:returnFalsereturnTrue写个代码来计算某个数值范围内有多少个质数defget_prime_nums():returnlen(list(filter(is_prime,range(2,5

Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始

1.前言本文将介绍希尔排序、归并排序、基数排序(桶排序)。在所有的排序算法中,冒泡、插入、选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置。希尔、归并、快速排序算法也可归为同一类,它们的共同点都是建立在分治思想之上。把大问题分拆成小问题,解决所有小问题后,再合并每一个小问题的结果,最终得到对原始问题的解答。通俗而言:化整为零,各个击破。分治算法很有哲学蕴味:老祖宗所言合久必分,分久必合,分开地目的是为了更好的合并。分治算法的求解流程:分解问题:将一个需要解决的、看起很复杂原始问题分拆成很多独立的子问题,子问题与原始问题有相似性。如:一个数列的局部(小

「双指针/kmp」通过连接另一个数组的子数组得到一个数组(力扣第1764题)

本题为12月17日力扣每日一题题目来源:力扣第1764题题目tag:双指针kmp题面题目描述给你一个长度为n的二维整数数组groups,同时给你一个整数数组nums。你是否可以从nums中选出n个不相交的子数组,使得第i个子数组与groups[i](下标从0开始)完全相同,且如果i>0,那么第(i-1)个子数组在nums中出现的位置在第i个子数组前面。(也就是说,这些子数组在nums中出现的顺序需要与groups顺序相同)如果你可以找出这样的n个子数组,请你返回true,否则返回false。如果不存在下标为k的元素nums[k]属于不止一个子数组,就称这些子数组是不相交的。子数组指的是原数组中

leetcode 416. Partition Equal Subset Sum 分割等和子集(中等)

一、题目大意标签:动态规划https://leetcode.cn/problems/partition-equal-subset-sum给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。提示:11二、解题思路设所有数字和为sum,我们的目标是选取一个子数组,使它的总和为sum/2,定义二维boolean数组dp[i][j],其意义是使

java简单算法:删除有序数组中的重复项

问题给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么 nums 的前k个元素应该保存最终结果。将最终结果插入 nums的前k个位置后返回k。不要使用额外的空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。问题转义:将数组采用原地替换的方式使得原数组删除重复值,并且在O(1)的时间复杂度下,返回数组改变后的长度。解决classSolution{publicintremo

「双指针/kmp」通过连接另一个数组的子数组得到一个数组(力扣第1764题)

本题为12月17日力扣每日一题题目来源:力扣第1764题题目tag:双指针kmp题面题目描述给你一个长度为n的二维整数数组groups,同时给你一个整数数组nums。你是否可以从nums中选出n个不相交的子数组,使得第i个子数组与groups[i](下标从0开始)完全相同,且如果i>0,那么第(i-1)个子数组在nums中出现的位置在第i个子数组前面。(也就是说,这些子数组在nums中出现的顺序需要与groups顺序相同)如果你可以找出这样的n个子数组,请你返回true,否则返回false。如果不存在下标为k的元素nums[k]属于不止一个子数组,就称这些子数组是不相交的。子数组指的是原数组中

leetcode 416. Partition Equal Subset Sum 分割等和子集(中等)

一、题目大意标签:动态规划https://leetcode.cn/problems/partition-equal-subset-sum给你一个只包含正整数的非空数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。提示:11二、解题思路设所有数字和为sum,我们的目标是选取一个子数组,使它的总和为sum/2,定义二维boolean数组dp[i][j],其意义是使

java简单算法:删除有序数组中的重复项

问题给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有k个元素,那么 nums 的前k个元素应该保存最终结果。将最终结果插入 nums的前k个位置后返回k。不要使用额外的空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。问题转义:将数组采用原地替换的方式使得原数组删除重复值,并且在O(1)的时间复杂度下,返回数组改变后的长度。解决classSolution{publicintremo