
/*** @param {number[]} nums* @return {number[]}*/var sortedSquares = function(nums) {var result = [];//遍历A中每个数字for(var i = 0; i < nums.length; i ++){result.push(nums[i] * nums[i]);}//对result的元素排序result.sort((a,b) => a - b);return result;};
/**
* @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
};

/**
* @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);
};

/**
* @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
}
}
};

/**
* @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
}
}
};

我的解答
/**
* @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
};
然而输出:
原因: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('')
};

解法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)];
};

* @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;
};
