leetcode初级算法篇——数组(一)

1.删除排序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

判断当前位于后一位是否相等,相等则删除当前位,数组下标-1,从前一位开始再进行比较

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    
    
  for(let i = 0; i < nums.length; i ++) {
    
    
    if (nums[i] === nums[i + 1]) {
    
    
      nums.splice(i, 1)
      i = i - 1
    }
  }
  return nums.length
};

2.买卖股票的最佳时机 II

给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

低买高抛,将所有为正数的利润相加就是最高的利润

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    
    
  let total = 0
  for(let i = 0; i < prices.length - 1; i ++) {
    
    
    if (prices[i] < prices[i + 1]) {
    
    
      total += (prices[i + 1] - prices[i])
    }
  }
  return total
};

3.旋转数组

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数
输入: nums = [1,2,3,4,5,6,7], k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右轮转 1 步: [7,1,2,3,4,5,6]
向右轮转 2 步: [6,7,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]

需要先拷贝一份原数组,k如果等于数组的长度则相当于没有移动

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function(nums, k) {
    
    
  k = k % nums.length
  let temp = nums.map(item => item)
  for(let i = 0; i < nums.length; i ++) {
    
    
    nums[i] = temp[(i - k + nums.length) % nums.length]
  }
  return nums
};

4.存在重复元素

给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    
  let newNums = nums.sort((a, b) => a - b)
  for(let i = 0; i < nums.length - 1; i ++) {
    
    
    if (nums[i] === nums[i + 1]) return true
  }
  return false
};

5.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    
    
  let newNums = nums.sort((a, b) => a- b)
  for(let i = 0; i < nums.length; i ++) {
    
    
    if (nums[i] !== nums[i - 1] && nums[i] !== nums[i + 1]) return nums[i]
  }
};

以上均为自己的解题思路,leetcode上还有更多更好的解题思路https://leetcode-cn.com/

猜你喜欢

转载自blog.csdn.net/Wind_AN/article/details/121538703