找出整型数组中乘积最大的三个数

给定一个包含整数的无序数组,要求找出乘积最大的三个数。

思路:先对数组进行排序,取最后三个数值的乘积

  1. var unsorted_array = [-10, 7, 29, 30, 5, -10, -70];
  2. computeProduct(unsorted_array); // 21000
  3. function sortIntegers(a, b) {
  4. return a - b;
  5. }
  6. function computeProduct(unsorted) {
  7. var sorted_array = unsorted.sort(sortIntegers),
  8. product1 = 1,
  9. product2 = 1,
  10. array_n_element = sorted_array.length - 1;
  11. for (var x = array_n_element; x > array_n_element - 3; x--) {
  12. product1 = product1 * sorted_array[x];
  13. }
  14. product2 = sorted_array[0] sorted_array[1] sorted_array[array_n_element];
  15. if (product1 > product2) return product1;
  16. return product2
  17. };

数组去重

给定某无序数组,要求去除数组中的重复数字并且返回新的无重复数组。

  1. // ES6 Implementation
  2. var array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
  3. Array.from(new Set(array));
  4. // [1, 2, 3, 5, 9, 8]
  5. // ES5 Implementation
  6. var array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
  7. uniqueArray(array);
  8. // [1, 2, 3, 5, 9, 8]
  9. function uniqueArray(array) {
  10. var hashmap = {};
  11. var unique = [];
  12. for(var i = 0; i < array.length; i++) {
  13. if(!hashmap.hasOwnProperty([array[i]])) {
  14. hashmap[array[i]] = 1;
  15. unique.push(array[i]);
  16. }
  17. }
  18. return unique;
  19. }

两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。

  1. var intersection = function(nums1, nums2) {
  2. // let arr = []
  3. // let map = null
  4. // for (let i = 0 ; i < nums1.length; i++) {
  5. // if (nums2.includes(nums1[i]) && nums1[i] !== map) {
  6. // arr.push(nums1[i])
  7. // map = nums1[i]
  8. // }
  9. // }
  10. // return Array.from(new Set(arr))
  11. return [...new Set(nums1)].filter(item => nums2.includes(item))
  12. };

最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例: 输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

  1. var maxSubArray = function(nums) {
  2. let res = nums[0]
  3. let sum = 0
  4. for (let i = 0; i < nums.length; i++) {
  5. // 如果sum加上当前nums[i]比原sum更大,就加。
  6. // 否则就是比原sum更小,以当前nums[i]为子序列头重新算sum
  7. //但是记住要每一阶段的sum都要用res来比较一下,留下最大的sum。
  8. if (sum > 0) {
  9. sum += nums[i]
  10. } else {
  11. sum = nums[i]
  12. }
  13. res = Math.max(res, sum)
  14. }
  15. return res
  16. }