双指针总结

206 阅读1分钟

回文数

给你一个整数x,如果x是一个回文整数,返回true;否则返回false。 回文数是指正序(从左向右)和倒叙(从右向左)读的都是一样的整数。

var isPalindrome=function (x){  
   let str=x.toString();//'12321'  
   let arr=str.split('')//['1','2','3','2','1']  
   let newArr=arr.reverse();  
   let newStr=newArr.join('');//'12321'  
   return x===Number(newStr)  
};  
console.log(isPalindrome(12321));//true
var isPalindrome=function (x){  
    let res=0  
    let current=x  
    while (current){  
    let last=current%10  
    current=Math.floor(current/10)  
    res= res*10+last  
 }  
 return res===x  
}  
console.log(isPalindrome(12321));

双指针

   let str='yesey'  
  var isPalindrome=function (str){  
    let i=0  
    let j=str.length-1  
    while(i<=j){  
        if (str[i]===str[j]){  
          i++  
          j--  
       }else {  
        return false  
      }  
   }  
   return true  
};  
console.log(isPalindrome(str));

合并两个有序数组

给你两个按非递减顺序排列的整数数组nums1和nums2另有两个整数m和n,分别nums1和nums2中的元素数目。 请你合并nums2到nums1中,使得合并后的数组同样按照非递减顺序排列。 最终,合并后数组不应该由函数返回,而是存储在数组nums1中,为了应对这种情况,nums1的初始长度为m+n,其中前m个元素表示应该合并的元素,后n个元素为0,应该忽略。nums2的长度为n。

let nums1 = [1, 2, 3, 0, 0, 0], m = 3, nums2 = [2, 5, 6], n = 3  
  
var merge = function (num1, m, nums2, n) {  
let i = m - 1;  
let j = n - 1;  
let k = m + n - 1  
while (i >= 0 && j >= 0) {  
//比较两根指针的值,取比较大的从nums1的尾部填补  
if (nums1[i] >= nums2[j]) {  
     nums1[k] = nums1[i]  
     i--  
     k--  
  } else {  
    nums1[k] = nums2[j]  
    j--  
    k--  
  }  
 }  
while (j >= 0) {  
  nums1[k] = nums2[j]  
  j--  
  k--  
 }  
};  
merge(nums1, m, nums2, n)  
console.log(nums1);