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

浙公网安备 33010602011771号