leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]
[toc
88. 合并两个有序数组
var merge = function(nums1, m, nums2, n) {
let A1 = nums1.slice(0, m)
let A2 = nums2
// 追加哨兵
A1.push(Number.MAX_SAFE_INTEGER)
A2.push(Number.MAX_SAFE_INTEGER)
for (let k = 0, i = 0, j = 0; k < m + n; k++) {
// 循环不变式
// k: 下一个写入位置
// i: A1中获回写位置
// j: A2中回写位置
nums1[k] = A1[i] < A2[j] ? A1[i++] : A2[j++]
}
};
202. 快乐数
var isHappy = function(n) {
const squareSum = (n) => {
let sum = 0
while (n > 0) {
let digit = n % 10
sum += digit * digit
n = Math.floor(n / 10)
}
return sum
}
// 判断是否有循环可以使用快慢指针,表示链表中有环
let slow = n
let fast = squareSum(n)
while (slow != fast) {
slow = squareSum(slow)
fast = squareSum(squareSum(fast))
}
return slow === 1
};
345. 反转字符串中的元音字母
var reverseVowels = function(s) {
let set = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
let arr = s.split('')
let i = 0,
j = s.length - 1
while (i < j) {
if (set.has(arr[i])) {
if (set.has(arr[j])) {
[arr[i], arr[j]] = [arr[j], arr[i]]
i++
}
j--
} else {
i++
}
}
return arr.join('')
};
392. 判断子序列
var isSubsequence = function(s, t) {
if (s == '') return true
let i = 0;
let j = 0
while (j < t.length) {
if (s[i] === t[j]) {
i++
}
if (i == s.length) {
return true
}
j++
}
return false
};
455. 分发饼干
var findContentChildren = function(g, s) {
let ng = g.sort((a, b) => a - b)
let ns = s.sort((a, b) => a - b)
let [i, j] = [0, 0]
while (i < ng.length && j < ns.length) {
if (ng[i] <= ns[j]) {
i++
}
j++ // 饼干被消费或不满足,需递增
}
return i
};
905. 按奇偶排序数组
var sortArrayByParity = function(nums) {
let i = 0;
let j = nums.length - 1
while (i <= j) {
if (nums[j] % 2 == 0 && nums[i] % 2 != 0) { // 偶前奇后
[nums[i], nums[j]] = [nums[j], nums[i]]
i++
j--
} else if (nums[j] % 2 == 0) {
i++
} else if (nums[i] % 2 != 0) {
j--
} else {
i++
j--
}
}
return nums
};
922. 按奇偶排序数组 II
var sortArrayByParityII = function(nums) {
let j = 1;
let o = 0
let res = []
nums.forEach(n => {
if (n % 2 == 0) {
res[o] = n
o += 2
} else {
res[j] = n
j += 2
}
})
return res
};
917. 仅仅反转字母
var reverseOnlyLetters = function(s) {
let reg = /[a-zA-Z]/
let strArr = s.split('')
let i = 0
let j = strArr.length - 1
while (i < j) {
if (reg.test(strArr[i]) && reg.test(strArr[j])) {
[strArr[i], strArr[j]] = [strArr[j], strArr[i]]
i++
j--
} else if (reg.test(strArr[i])) {
j--
} else if (reg.test(strArr[j])) {
i++
} else {
i++
j--
}
console.log(strArr);
}
return strArr.join('')
};
925. 长按键入
var isLongPressedName = function(name, typed) {
let i = 0
let j = 0
while (j < typed.length) {
if (name[i] == typed[j]) {
i++
}
if (name[i] != typed[j] && name[i - 1] != typed[j]) {
return false
}
if (i == name.length) {
let flag = typed.slice(j).split(name[name.length - 1]).join('')
if (flag != '') {
return false
}
return true
}
j++
}
return false
};
942. 增减字符串匹配
var diStringMatch = function(s) {
let m = 0
let n = s.length
let res = []
for (let i = 0; i <= s.length; i++) {
if (s[i] == 'I') {
res.push(m)
m++
} else {
res.push(n)
n--
}
}
return res
};
leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]的更多相关文章
- 这样leetcode简单题都更完了
这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...
- leetcode简单题6
今天的华师 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, fro ...
- leetcode.双指针.88合并两个有序数组-Java
1. 具体题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别 ...
- 【LeetCode】双指针 two_pointers(共47题)
[3]Longest Substring Without Repeating Characters [11]Container With Most Water [15]3Sum (2019年2月26日 ...
- LeetCode—66、88、118、119、121 Array(Easy)
66. Plus One Given a non-negative integer represented as a non-empty array of digits, plus one to th ...
- LeetCode简单算法之删除链表中的节点 #237
闲来无事,刷刷力扣,以解心头之闷. 题目内容: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以 ...
- LeetCode简单题(三)
题目一: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股 ...
- LeetCode简单题(二)
题目一: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的 ...
- LeetCode简单题(一)
题目一: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...
- LeetCode简单题汇总
1.两个数之和 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index ...
随机推荐
- PageOffice 在线编辑 office文件,回调父页面
一.子页面调用父页面的方法 var value=window.external.CallParentFunc("ParentFunName(Arguments);");//父页面的 ...
- Vue3.0极速入门(一) - 环境安装&新建项目
Vue介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只 ...
- 使用Docker安装Odoo 17(非Docker Compose)
使用Docker安装Odoo 17(非Docker Compose) 前言 最近在学习Odoo,先是windows 安装企业版,多年不用windows的服务器操作系统,一看windows的ECS那么贵 ...
- FreeRTOS例程开发
环境配置 下载官方源码 https://www.freertos.org/ 找到这个,他就是visual studio示例demo,我们主要在这个的基础上修改 下载visio studio https ...
- uniapp 判断当前是保存还是修改操作
步骤分析: 首先得确定你进入表单后传入了id或者整个对象[这里使用id来进行讲解]其次就是两个请求:POST(保存的) 和 PUT(修改的)最后就是通过传入的id是否存在进行判断即可 POST 请求 ...
- css摩天轮
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- kettle从入门到精通 第四十课 kettle 增量同步(分钟/小时级)
1.上一课我们学习了在数据量大的情况下的分页全量同步示例,本次我们一起学习下kettle 增量全量同步.有些业务场景不需要实时数据,比如每N分钟抽取一次数据等. 2.kettle增量全量同步示例依 ...
- 使用 INFINI Console 实现 Elasticsearch 的增量数据迁移
功能介绍 # 在 INFINI Console 1.3.0 版本里,数据迁移功能增加了对增量迁移的支持.这篇文章将会介绍增量迁移的具体使用方法和实现原理. 场景介绍 # 以常见的日志场景为例,假设 A ...
- 使用final shell 连接使用 ubuntu server linux
书接上回,VM 安装ubuntu server:https://www.cnblogs.com/runliuv/p/16880599.html 1.从 https://www.hostbuf.com/ ...
- work11
1,简述String类中的equals方法与Object类中的equals方法的不同点. /* Object 类 1,它是所有类的一个根类 2,其他类默认继承Object类 常用方法: 1,toStr ...