力扣第1、141题

1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
image.png

解题思路

知识点:

map对象中存放的是{key,value}键值对
has(key)方法判断map中是否存在key,返回boolen值
get(key)方法返回map中的value值

解题过程:

1.用map来存放{数组元素值,坐标}这样的键值对
2.运用逆向解法,即用target减去数组中的某个元素,然后来判断map中是否有相同的值,若有则存在满足条件的答案,返回两个坐标即可;若没有,则保存{数组中某个元素值,对应的坐标}到map对象中。依次遍历即可判断是否有满足条件的两个元素。

  1. var twoSum = function(nums, target) {
  2. const map = new Map()
  3. for(let i = 0; i < nums.length; i++) {
  4. let x = target - nums[i]
  5. if(map.has(x)) {
  6. return [map.get(x),i]
  7. }
  8. map.set(nums[i],i)
  9. }
  10. };

141.环形链表

image.png
双指针(快慢指针),快指针走两步,慢指针走一步。
如果快指针走到空(fast===null或fast.next===null【因为快指针走两步,所以要判断next】) 则没有环。如果快慢指针相等(fast===slow),则有环

  1. var hasCycle = function(head) {
  2. let slow = head
  3. let fast = head
  4. while(fast && fast.next){
  5. slow = slow.next
  6. fast = fast.next.next
  7. if(slow===fast){
  8. return true
  9. }
  10. }
  11. return false
  12. };