我是靠谱客的博主 勤恳皮带,最近开发中收集的这篇文章主要介绍leetcode每天5题-Day501.仅执行一次字符串交换能否使两个字符串相等2.缺失的第一个正数3.丢失的数字4.找到所有数组中消失的数字,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1.仅执行一次字符串交换能否使两个字符串相等
  • 2.缺失的第一个正数
  • 3.丢失的数字
  • 4.找到所有数组中消失的数字

1.仅执行一次字符串交换能否使两个字符串相等

1790. 仅执行一次字符串交换能否使两个字符串相等-简单

自己的解法
思路:利用count计数不相等字符的对数,超过两对返回false,利用a b记录两对不相等字符的下标。

var areAlmostEqual = function(s1, s2) {
    let a = 0, b = 0, count = 0;
    for(let i = 0; i < s1.length; i++) {
        if(s1[i] !== s2[i] && count == 0) {
            if(i == s1.length - 1) {
                return false;
            }
            a = i;
            count++;
        }else if(s1[i] !== s2[i] && count == 1){
            b = i;
            count++;
            if(s2[a] !== s1[b] || s2[b] !== s1[a]) {
                return false;
            }
        }else if(s1[i] !== s2[i] && count >1) {
            return false;
        }
        if(i == s1.length - 1 && count == 1) {
            return false;
        }
    }
    return true;
};

官方解法
思路:用一个数组存放不相等字符的索引,数组长度不为2就返回false,否则比较s1[diff[0]]s2[diff[1]]s1[diff[1]]s2[diff[0]]字符是否相等。

var areAlmostEqual = function(s1, s2) {
    const n = s1.length;
    const diff = [];
    for (let i = 0; i < n; ++i) {
        if (s1[i] !== s2[i]) {
            if (diff.length >= 2) {
                return false;
            }
            diff.push(i);
        }
    }
    if (diff.length === 0) {
        return true;
    }
    if (diff.length !== 2) {
        return false;
    }
    return s1[diff[0]] === s2[diff[1]] && s1[diff[1]] === s2[diff[0]];
};

2.缺失的第一个正数

41. 缺失的第一个正数-困难
注:当将符合数组范围内的数据放入到数组位置时,不能直接[nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]]。要利用swap函数

function swap(nums, i ,j) {
    let temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
 }
var firstMissingPositive = function(nums) {
    for(let i = 0; i < nums.length; i++) {
        while(nums[i] > 0 && nums[i] < nums.length && nums[i] !== nums[nums[i] - 1]) {
            // [nums[i], nums[nums[i] - 1]] = [nums[nums[i] - 1], nums[i]];
            swap(nums, nums[i] - 1, i);
        }
    }
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] !== i + 1) {
            return i + 1;
        }
    }
    return nums.length + 1;
};

3.丢失的数字

268. 丢失的数字-简单
与上一题一样的思路。

function swap(nums, i ,j) {
    let temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
 }
var missingNumber = function(nums) {
for(let i = 0; i < nums.length; i++) {
        while(nums[i] >= 0 && nums[i] < nums.length && nums[i] !== nums[nums[i]]) {
            swap(nums, nums[i], i);
        }
    }
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] !== i) {
            return i;
        }
    }
    return nums.length;
};

4.找到所有数组中消失的数字

448. 找到所有数组中消失的数字-简单
Set解法

var findDisappearedNumbers = function(nums) {
    const len=nums.length;
    const sortNum=Array.from(new Set(nums.sort((a,b)=>a-b)));
    const ans=[];
    let n=0;
    for(let i=0;i<len;i++){
        n+=1;
        if(sortNum.indexOf(n)<0){
            ans.push(n);
        }
    }
    return ans;
};

与上一道题相同的思路

function swap(nums, i ,j) {
    let temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
}
var findDisappearedNumbers = function(nums) {
    for(let i = 0; i < nums.length; i++) {
        while(nums[i] !== nums[nums[i] - 1]) {
            swap(nums, nums[i] - 1, i);
        }
    }
    const ans = [];
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] !== i + 1) {
            ans.push(i+1);
        }
    }
    return ans;
};

最后

以上就是勤恳皮带为你收集整理的leetcode每天5题-Day501.仅执行一次字符串交换能否使两个字符串相等2.缺失的第一个正数3.丢失的数字4.找到所有数组中消失的数字的全部内容,希望文章能够帮你解决leetcode每天5题-Day501.仅执行一次字符串交换能否使两个字符串相等2.缺失的第一个正数3.丢失的数字4.找到所有数组中消失的数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部