找出整型数组中乘积最大的三个数
给定一个包含整数的无序数组,要求找出乘积最大的三个数。
思路:先对数组进行排序,取最后三个数值的乘积
var unsorted_array = [-10, 7, 29, 30, 5, -10, -70];
computeProduct(unsorted_array); // 21000
function sortIntegers(a, b) {
return a - b;
}
function computeProduct(unsorted) {
var sorted_array = unsorted.sort(sortIntegers),
product1 = 1,
product2 = 1,
array_n_element = sorted_array.length - 1;
for (var x = array_n_element; x > array_n_element - 3; x--) {
product1 = product1 * sorted_array[x];
}
product2 = sorted_array[0] sorted_array[1] sorted_array[array_n_element];
if (product1 > product2) return product1;
return product2
};
数组去重
给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。
// ES6 Implementation
var array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
Array.from(new Set(array));
// [1, 2, 3, 5, 9, 8]
// ES5 Implementation
var array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
uniqueArray(array);
// [1, 2, 3, 5, 9, 8]
function uniqueArray(array) {
var hashmap = {};
var unique = [];
for(var i = 0; i < array.length; i++) {
if(!hashmap.hasOwnProperty([array[i]])) {
hashmap[array[i]] = 1;
unique.push(array[i]);
}
}
return unique;
}
两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
var intersection = function(nums1, nums2) {
// let arr = []
// let map = null
// for (let i = 0 ; i < nums1.length; i++) {
// if (nums2.includes(nums1[i]) && nums1[i] !== map) {
// arr.push(nums1[i])
// map = nums1[i]
// }
// }
// return Array.from(new Set(arr))
return [...new Set(nums1)].filter(item => nums2.includes(item))
};
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例: 输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
var maxSubArray = function(nums) {
let res = nums[0]
let sum = 0
for (let i = 0; i < nums.length; i++) {
// 如果sum加上当前nums[i]比原sum更大,就加。
// 否则就是比原sum更小,以当前nums[i]为子序列头重新算sum
//但是记住要每一阶段的sum都要用res来比较一下,留下最大的sum。
if (sum > 0) {
sum += nums[i]
} else {
sum = nums[i]
}
res = Math.max(res, sum)
}
return res
}