1.给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
解法
1.ES6
var containsDuplicate = function(nums) {
return new Set(nums).size !== nums.length
};
2.哈希表(空间换时间)
var containsDuplicate = function(nums) {
const set = new Set()
for (let i = 0, len = nums.length; i < len; i++) {
if (!set.has(nums[i])) {
set.add(nums[i], true)
} else {
return true
}
}
return false
};
3.排序
var containsDuplicate = function(nums) {
nums.sort((a, b) => a - b);
const n = nums.length;
for (let i = 0; i < n - 1; i++) {
if (nums[i] === nums[i + 1]) {
return true;
}
}
return false;
};
2.最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
解法
1.动态规划
var maxSubArray = function(nums) {
// dp记录到当前到i这个位置可以达到的最大值
let dp = [], max = -Infinity
dp[0] = max = nums[0]
for (let i = 1, len = nums.length; i < len; i++) {
dp[i] = Math.max(nums[i] + dp[i - 1], nums[i])
max = Math.max(max, dp[i])
}
return max
}