【leecode题-双指针法】头尾指针

【leecode题】这个title打算做成一个系列,这个系列会跟着大佬整理好的leecode小白推荐刷题顺序来学习javascript的算法与数据结构,本篇的路径见红框

167.两数之和II-输入有序数组

 

 

function twoSum(nums, target) {
    let i=0
    let j=nums.length-1
    while(i<j){
      if (nums[i]+nums[j]==target){
        return [i,j]
      } else if (nums[i]+nums[j]<target){
        i++
      } else {
        j--  
      }
    }
    return [-1,-1]
  }
  let nums = [1, 2, 3, 7, 11, 15]
  console.log(twoSum(nums, 9))
  console.log(twoSum(nums, 91))

小结:上面代码参考别人的

 345.反转字符串中的元音字母

 

  function getArr(str) {
    let temp = ["a", "e", "i", "o", "u"]
    let arr = []
    str.forEach((strItem, index) => {
      temp.forEach(tempItem => {
        if (strItem == tempItem) {
          arr.push([index, strItem])
        }
      })
    })
    let index = []
    let vowel = []
    arr.forEach(item => {
      index.push(item[0])
      vowel.push(item[1])
    })
    vowel.reverse()
    arr = []
    for (let i = 0; i < index.length; i++) {
      arr.push([index[i], vowel[i]])
    }
    return arr
  }
  function reverse(str) {
    let arr = getArr(str)
    for (let i = 0; i < arr.length; i++) {
      str.splice(arr[i][0], 1, arr[i][1])
    }
    return str.join("")
  }
  let str = "helloqabi"
  newStr = reverse(str.split(""))
  console.log("str::", str)
  console.log("newStr::", newStr)

 

 

 

function reverse(s) {
    let arr = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
    let left = 0
    let right = s.length - 1
    let str = ''
    s = s.split('')
    while (left < right) {
      if (arr.indexOf(s[left]) != -1) {
        left = left
      } else {
        left++
      }

      if (arr.indexOf(s[right]) != -1) {
        right = right
      } else {
        right--
      }

      if (arr.indexOf(s[left]) != -1 && arr.indexOf(s[right]) != -1) {
        str = s[left]
        s[left] = s[right]
        s[right] = str
        left++
        right--
      }
    }
    return s.join('')
  };
  let s = "lllalllelllillollull"
  console.log(s)
  console.log(reverse(s))

小结:上面第一个的代码自己做的,看了别人的之后发现,我忘考虑了大写字母,而且这道题希望你用的是双指针法去解决,我用的是比较没有效率的暴力法,第二个是别人的,用的双指针法

posted @ 2020-08-05 17:20  赤色大地  阅读(140)  评论(0)    收藏  举报