image.png

    1. /**
    2. * @param {number[]} nums
    3. * @return {number[]}
    4. */
    5. var sortedSquares = function(nums) {
    6. var result = [];
    7. //遍历A中每个数字
    8. for(var i = 0; i < nums.length; i ++){
    9. result.push(nums[i] * nums[i]);
    10. }
    11. //对result的元素排序
    12. result.sort((a,b) => a - b);
    13. return result;
    14. };
    /**
     * @param {number[]} nums
     * @return {number[]}
     */
    var sortedSquares = function(nums) {
        let res = []
        for (let i = 0, j = nums.length - 1; i <= j;) {
          const left = Math.abs(nums[i])
          const right = Math.abs(nums[j])
          if (right > left) {
            // push element to the front of the array
            res.unshift(right * right)
    
            j--
          } else {
            res.unshift(left * left)
    
            i++
          }
        }
        return res
    
    };
    

    image.png

    /**
     * @param {number[]} nums
     * @param {number} k
     * @return {void} Do not return anything, modify nums in-place instead.
     */
     const reverse = (nums, start, end) => {
        while (start < end) {
            const temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start += 1;
            end -= 1;
        }
    }
    var rotate = function(nums, k) {
        k %= nums.length;
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.length - 1);
    
    };
    

    image.png

    /**
     * @param {number[]} nums
     * @return {void} Do not return anything, modify nums in-place instead.
     */
    var moveZeroes = function(nums) { 
    let j=0;
     for(var i=0;i<nums.length;i++){
         if(nums[i]!=0){        
            nums[i] = nums.splice(j, 1, nums[i])[0]
            j=j+1
         }
    
     }
    };
    

    image.png

    /**
     * @param {number[]} numbers
     * @param {number} target
     * @return {number[]}
     */
    var twoSum = function(numbers, target) {
        let left=0,right=numbers.length-1
        var arr=[]
        while(left<right){
          if(numbers[left]+numbers[right]<target){
               left++
           }
          else if(numbers[left]+numbers[right]>target){
               right--
           }
          else{
            arr[0]=left+1
            arr[1]= right+1
            return arr
          }
       }
    
    };
    

    image.png
    我的解答

    /**
     * @param {string} s
     * @return {string}
     */
      const reverse = (nums, start, end) => {
        while (start < end) {
            const temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start += 1;
            end -= 1;
    
        }
        return nums
    }
    var reverseWords = function(s) {
     let left=0,right=0
     while(right<s.length){
     if(s[right]==' '){
       s=reverse(s,left,right-1)
       left=right+1
     }
     if(right==s.length-1){
       s=reverse(s,left,right)
     }
     right++
     console.log(left,right)
     }
     return s
    };
    

    然而输出:
    image.png
    原因:Js中的String类型不可变!!!
    新的解答(新建一个字符串)

    /**
     * @param {string} s
     * @return {string}
     */
    var reverseWords = function(s) {
     let left=0,right=0
     let arr=[]
     while(right<s.length){
     if(s[right]==' '){
        for(var i=right-1;i>=left;i--){
            arr.push(s[i])
        }
        arr.push(' ') 
       left=right+1
     }
     if(right==s.length-1){
        for(var i=right;i>=left;i--){
            arr.push(s[i])
        }
    
     }
     right++
     }
     return arr.join('')
    };
    

    image.png
    解法1

    * @param {ListNode} head
     * @return {ListNode}
     */
    var middleNode = function(head) {
        slow = fast = head;
        while (fast && fast.next) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    };
    

    解法2

    var middleNode = function(head) {
        let A = [head];
        while (A[A.length - 1].next != null)
            A.push(A[A.length - 1].next);
        return A[Math.trunc(A.length / 2)];
    };
    

    image.png

     * @param {ListNode} head
     * @param {number} n
     * @return {ListNode}
     */
    var removeNthFromEnd = function(head, n) {
        let slow = head
        let fast = head
    
         while(n--!=0){
                fast=fast.next;
            }
            // 如果快指针走到了最后说明删除的是第一个节点,就返回head.next就好
            if(fast==null){
                return head.next;
            }
            // 使得slow每次都是在待删除的前一个节点, 所以要先让fast先走一步
            fast=fast.next;
            while(fast!=null){
                fast=fast.next;
                slow=slow.next;
            }
            // 因为已经保证了是待删除节点的前一个节点, 直接删除即可
            slow.next=slow.next.next;
            return head;
    
    };