编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
思路
对数组翻转:javascript实现的翻转方法reverse
循环数组长度的一半,从前到后替换指定元素(借助解构赋值替换)
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function(s) {
let len = s.length
for (let i = 0; i < parseInt(len / 2, 10); i++) {
[s[i], s[len - i - 1]] = [s[len - i - 1], s[i]]
}
};
【一天一大 lee】环形链表 (难度:简单) - Day20201009
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。否则,返回 false 。
进阶:
你能用 O(1)(即,常量)内存解决此问题吗?
示例1
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例2
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例3
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
提示:
]
<= Node.val <=
思路
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
let map = new Map();
while(head!== null){
if(map.has(head)) return true
map.set(head,true)
head = head.next;
}
return false
};
var hasCycle = function (head) {
if (head == null || head.next == null) return false
let slow = head,
fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null) return false
slow = slow.next;
fast = fast.next.next;
}
return true;
};