leetcode刷题记录(面试top题-数组-简单)2020.8.12

189.旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:
输入: [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]

我的思路就是暴力遍历 用循环 数组尾部弹出的放到数组头部去。看了一下题解,发现还有两种比较妙的方式,借用splice的删除和插入。

方法一:暴力遍历

var rotate = function(nums, k) {
    var kn=k%nums.length;
    for(var i=0;i

方法二:splice的删除和插入,用扩展符去掉[],把nums.length-k到nums.length删掉,插入到数组前面。

var rotate = function(nums, k) {
    nums.splice(0,0,...nums.splice(nums.length-k));
};

方法三:类似于方法二,只是用的unshift来插入

var rotate = function(nums, k) {
    nums.unshift(...nums.splice(nums.length-k));
};

268.缺失数字
给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。

示例 1:
输入: [3,0,1]
输出: 2

我的方法就是排序,然后各种情况下的判断,看了题解,发现有三种比较巧妙的方法,一种是异或,一种是排序之后比较下标值,还有一种是求和完之后减去现有的和,就是缺失的数字值。

方法一:异或 依次与数组元素和数组索引异或运算,剩下的就是缺失的数字。
1 ^ 1 = 0
0 ^ 1 = 1

这种方法一般可以用在连续数字中找数字。

var missingNumber = function(nums) {
    var res=nums.length;
    for(var i=0;i

方法二:排序,比较下标值

var missingNumber = function(nums) {
    nums.sort(function(a,b){
        return a-b;
    })
    for(var i=0;i

方法三:求和相减

var missingNumber = function (nums) {
    var sum = 0;
    var count = 0;
    for (var i = 0; i <= nums.length; i++) {
        sum += i;
        if (i !== nums.length) {
            count += nums[i];
        }
    }
    return sum-count;
};

你可能感兴趣的:(刷题,leetcode)