我是靠谱客的博主 勤恳皮带,最近开发中收集的这篇文章主要介绍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.找到所有数组中消失的数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复