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 ...
随机推荐
- sass @extend(继承)指令详解
在设计网页的时候常常遇到这种情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式. 通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式. 普通CSS的实现 接下 ...
- .NET快速实现网页数据抓取
前言 今天我们来讲讲如何使用.NET开源(MIT License)的轻量.灵活.高性能.跨平台的分布式网络爬虫框架DotnetSpider来快速实现网页数据抓取功能. 注意:为了自身安全请在国家法律允 ...
- winform 绘图控件 chart 实时曲线图
官方教程:http:////files.cnblogs.com/files/HelloQLQ/Winform图表.rar 更多参考:https://blog.csdn.net/boxuming/art ...
- CENTOS6.8 修改主机名
1.临时修改主机名 显示主机名:spark@master:~$ hostnamemaster修改主机名:spark@master:~$ sudo hostname hadoopspark@mast ...
- C++笔记(5)浅拷贝和深拷贝
1. 定义 浅拷贝(shallow copy):多个对象共用同一块资源,同一块资源释放多次,崩溃或者内存泄漏 深拷贝(deep copy):每个对象共同拥有自己的资源,必须显式提供拷贝构造函数和赋值运 ...
- react类组件 组件传值
class Cmp1 extends React.Component{ render(){ return ( <div>{ this.props.name } -- 我是一个类</d ...
- 剑指Offer-53.表示数值的字符串(C++/Java)
题目: 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.14 ...
- RestApi请求地址支持多路径访问
RestApi请求地址支持多路径访问 @RestController@RequestMapping("/test") //单路径@RequestMapping(path = {&q ...
- IDEA 报错:无效的源发行版 sourceCompatibility
IDEA 报错:无效的源发行版 sourceCompatibility 检查配置文件中的jdk版本的配置,//错误:sourceCompatibility = '18'//修改成正确的如下:sourc ...
- 实验四:WinRAR漏洞
[实验目的] 通过打开rar文件,获取到目标机shell. [知识点] winrar漏洞 [实验原理] 该漏洞是由于WinRAR所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库 ...