存在重复元素
问题描述:
给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。
解法一:排序
思路:把数组排序之后比对相邻的元素是否相同,如果都不同则返回flase,相同返回true。
public boolean containsDuplicate02(int[] nums) {
Arrays.sort(nums);//排序
for(int i = 0;i<nums.length-1;i++){
if(nums[i]==nums[i+1]){
return true;
}
}
return false;
解法二:哈希表
思路:利用哈希表中元素不可重复的特点当add返回flase,即出现重复元素添加不成功时,返回true
public boolean containsDuplicate03(int[] nums) {
Set set = new HashSet();
for (int i:
nums) {
if (!set.add(i)){
return true;
}
}
return false;
}
解法三:暴力破解
思路:一个一个比对 相等返回true
public boolean containsDuplicate01(int[] nums) {
for(int i = 0;i<nums.length;i++){
for(int j = 0; j<nums.length;j++){
if(nums[i]==nums[j]) return true;
}
}
return false;
}
最大子数组和
问题描述
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
解法1:贪心算法
思路:如果前面累加起来的和是一个负数那么就全部舍弃,选下一个元素作为起始位置。如果前面累加起来是正数,就把下一个元素加上去。再判断这一轮的处理结果和上一轮的结果哪个大就选哪个。
public int maxSubArray(int[] nums) {
int res = nums[0];//如果刚开始res是0,那如果元素当中一直不出现正数最终就会返回0
int sum = 0;
for (int num : nums) {
if (sum > 0)//如果sum大于0 那就可以加上新的元素
sum += num;
else//否则直接舍弃 以当前元素为起始位置
sum = num;
res = Math.max(res, sum);//对比是否比之前的大
}
return res;
}