217. 存在重复元素
难度简单892
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
👇Java版本答案:
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> res=new HashSet<Integer>();
for(int i:nums)
res.add(i);
return res.size()<nums.length?true:false;
}
}
👇C++版本答案:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
return set<int>(nums.begin(),nums.end()).size()<nums.size()?true:false;
}
};
📌解题思路:
利用set去重。
去重后的数组长度小于原数组则返回true,否则false。
👂一点碎碎念:
size()方法c++和java都可以用。
是size()不是size。
Java调用利用set去重得在Set中new一个对象,调用HashSet方法。
53. 最大子数组和
难度中等5615
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
👇Java版本答案:
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
int sum = 0;
for (int num : nums) {
if (sum > 0)
sum += num;
else
sum = num;
res = Math.max(res, sum);
}
return res;
}
}
👇C++版本答案:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res=nums[0];
int sum=0;
for(int i=0;i<nums.size();++i){
sum=max(nums[i],nums[i]+sum);
res=max(res,sum);
}
return res;
}
};
📌解题思路:
利用max函数,不断选出最大的。
一或开两个数组不断比较选出最大数;二或比较数,遇见负数就中止一轮比较进入第二轮。
👂一点碎碎念:
Java中是Math.max(a,b);方法选出a与b中最大,C++中是max(a,b)选出最大。
不要思考太多,晓得大概思路,然后记住,以后会用就可以了