草庐IT

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

java算法: 三角形的最大周长

问题:给定由一些正数(代表长度)组成的数组nums,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0。解决:classSolution{publicintlargestPerimeter(int[]nums){Arrays.sort(nums);//将数组以升序排序,sort()是Arrays的函数for(inti=nums.length-1;i>=2;--i){//i取数组最大元素if(nums[i]c,则周长最大//如果以任意c作为最长边,得到的a,b都不满足a+b>c,则返回0总结:贪心+排序算法官方解释不失一般性,我们假设三角形的边长a

leetcode 413. Arithmetic Slices 等差数列划分

一、题目大意标签:动态归划https://leetcode.cn/problems/arithmetic-slices如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7]和[3,-1,-5,-9]都是等差数列。给你一个整数数组nums,返回数组nums中所有为等差数组的子数组个数。子数组是数组中的一个连续序列。示例1:输入:nums=[1,2,3,4]输出:3解释:nums中有三个子等差数组:[1,2,3]、[2,3,4]和[1,2,3,4]自身。示例2:输入:nums=[1]输出:0提示:1-1000二、解题思路因为

java算法: 三角形的最大周长

问题:给定由一些正数(代表长度)组成的数组nums,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0。解决:classSolution{publicintlargestPerimeter(int[]nums){Arrays.sort(nums);//将数组以升序排序,sort()是Arrays的函数for(inti=nums.length-1;i>=2;--i){//i取数组最大元素if(nums[i]c,则周长最大//如果以任意c作为最长边,得到的a,b都不满足a+b>c,则返回0总结:贪心+排序算法官方解释不失一般性,我们假设三角形的边长a

leetcode 413. Arithmetic Slices 等差数列划分

一、题目大意标签:动态归划https://leetcode.cn/problems/arithmetic-slices如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7]和[3,-1,-5,-9]都是等差数列。给你一个整数数组nums,返回数组nums中所有为等差数组的子数组个数。子数组是数组中的一个连续序列。示例1:输入:nums=[1,2,3,4]输出:3解释:nums中有三个子等差数组:[1,2,3]、[2,3,4]和[1,2,3,4]自身。示例2:输入:nums=[1]输出:0提示:1-1000二、解题思路因为

二分查找 & 移除元素

一、二分查找704.二分查找leetcode链接1.二分查找方法概述二分查找是针对有序数组的一种查找方式。是利用(letf+right)/2=mid的方式来对半缩短搜索范围的一种方法,一次查找,搜索的范围就会减半。相较于简单查找找寻一个target需要n步,则二分查找则最多只需查找log2n步。2.具体实现方法一点击查看代码classSolution{publicintsearch(int[]nums,inttarget){intleft=0;intright=nums.length-1;while(lefttarget){right=mid-1;}else{left=mid+1;}}retu

二分查找 & 移除元素

一、二分查找704.二分查找leetcode链接1.二分查找方法概述二分查找是针对有序数组的一种查找方式。是利用(letf+right)/2=mid的方式来对半缩短搜索范围的一种方法,一次查找,搜索的范围就会减半。相较于简单查找找寻一个target需要n步,则二分查找则最多只需查找log2n步。2.具体实现方法一点击查看代码classSolution{publicintsearch(int[]nums,inttarget){intleft=0;intright=nums.length-1;while(lefttarget){right=mid-1;}else{left=mid+1;}}retu

LeetCode - 数组的旋转总结

1.数组的旋转总结数组的旋转指的是将数组的最后若干个数提前到数组前面,数组的翻转指的是将数组的顺序颠倒。旋转可以通过多次翻转实现。数组的翻转很简单,通过双指针来实现:交换数组的第一个数和最后一个数,交换第二个数和倒数第二个数,一直到数组中间即可。2.题目记录189.轮转数组分析题意给你一个数组,将数组中的元素向右轮转 k **个位置,其中 k **是非负数。思路分析其实题目就是一个数组旋转问题,我们可以通过图片来分析一下:将上面这个数组向右轮转3个位置,其实就是:将数组的后3个元素旋转到数组前面,即:数组的旋转。前面我们讲到:数组的旋转可以通过多次数组翻转来实现:我们首先对整个数组进行翻转,然

[1] LeetCode 刷题笔记: 两数之和 [S]

[1]LeetCode刷题笔记:两数之和[S]目录[1]LeetCode刷题笔记:两数之和[S]题目描述题解参考暴力枚举复杂度分析使用哈希表复杂度分析参考题解C/C++的相关参考Rust的相关参考题目描述给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出和为目标值target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。题解参考暴力枚举最容易想到的方法是枚举数组中的每一个数x,寻找数组中是否存在target-x。当我们使用遍历整个数组的方式寻找target-x时,需要注