1、1、给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
2、最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 解题思路: 1、动态规划: 动态规划的中心思想: 循环一次,每次对比两次,一次是当前元素与此前元素和的比较,另一次所有元素比较出的最大值之间的比较 f(i)=max{f(i?1)+nums[i],nums[i]}
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int pre = 0, maxAns = nums[0];//新建了一个数组
for (const auto &x: nums) //顺序循环nums数组中的数字{
pre = max(pre + x, x);//求出当前位置数字的最大值
maxAns = max(maxAns, pre);//求出数组中每个位置所求出的最大值
}
return maxAns;//返回最大值
}
};
第一次提交:
思路是很简单的暴力求解法,但是暴力了个寂寞
//新建一个数组,顺序相加数字得到的和存入数组,当相加的数字小于之前相加的结果就往后挪一位数字进行相加,
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
for(int i=0;i<n-1;i++)
//int pre = 0, maxAns = nums[0];
//for (const auto &x: nums)
{
int sum=0;
int a = 0;
a = sum;
sum += nums[i];
return sum;
if(a<sum )
{
return 0;
}
//pre = max(pre + x, x);//求出当前位置数字的最大值
//maxAns = max(maxAns, pre);//求出数组中每个位置所求出的最大值
}
}
};
总结:能一次循环结束的问题就不多做循环,大小比较可以直接用max函数
|