LeetCode题解
数据结构入门
判断数组中是否有重复的元素
题目
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示:
1 <= nums.length <= 105
-109 <= nums[i] <= 109
题解
- 目前最优解
类数组对象一般具有length属性,Set对象比较特殊,它没有length属性,而是size属性
var声明的变量没有块级作用域,在全局有效
解题思路:Set对象可以看做是键和值相同的Map对象,所以它没有重复元素。先将数组转换成Set对象实现去重,若有重复元素,Set对象的元素个数会比原数组的元素个数少,据此判断数组中是否有重复元素
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { let set=new Set(nums) if(set.size!==nums.length) return true return false };
indexOf()从前往后查找数组元素,返回数组下标,没找到返回-1
lastIndexOf()与indexOf的区别是从后往前查找
若有重复元素,二者返回的下标必定不相等。所以可以通过比较返回下标判断数组是否有重复元素
/** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { for(let i of nums){ if(nums.indexOf(i)!==nums.lastIndexOf(i)) return true } return false };
最大子段和
题目
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
- 贪心算法
时间复杂度:O(n)
空间复杂度:O(1)
C语言实现
int maxSubArray(int n,int *nums) { int i,sum=nums[0],b=0; //b表示必须包含a[i]且只能从a[i]向左侧延伸的最大子段和 //b是当前最大值 ,每次循环b都会更新 for(i=0;i<=n;i++) { if(b>0) b+=a[i]; else b=a[i]; if(b>sum) sum=b;//sum=max(b[i]) } return sum; }
JS实现
/** * @param {number[]} nums * @return {number} */ var maxSubArray = function(nums) { // sum=nums[0]考虑了整个数组为负数或数组元素只有1个的情况 let b=0,sum=nums[0] for(let a of nums){ if(b>0){ b+=a } else{ b=a } if(b>sum) sum=b } return sum };
- 动态规划(目前最简洁)
时间复杂度:O(n)
空间复杂度:O(1)
/** * @param {number[]} nums * @return {number} */ var maxSubArray = function(nums) { //注意这里i<nums.length-1而不是i<nums.length,因为当i=nums.length-2时就已经求到了nums[nums.lenngth-1]。如果写成i<nums.length-1的话最后nums[nums.lenngth-1]的值为NAN for(i=0;i<nums.length-1;i++){ if(nums[i]>0){ nums[i+1]+=nums[i] } else{ nums[i+1]=nums[i+1] } } return Math.max(...nums) };
本文作者:Code6E
本文链接:https://www.cnblogs.com/road2code/p/17157182.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步