日常刷题0x17之未出新手村

136 阅读1分钟

如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的

题号:33
//谁让我想到这个方法了,不可能会让我这么做,此题必有蹊跷
 var search = function(nums, target) {

     for (let i = 0; i < nums.length; i++) {
         if (nums[i] == target) {
             return i
         }
     } 
     return -1
 };
 //基于上面最笨的遍历继续思考
var search = function (nums, target) {
     //数据是有规律的,即使旋转之后也是局部递增,前一部分的数字都大于后一部分递增数据
    if (target < nums[0]) {
        for (let i = nums.length - 1; i >= 0; i--) {
            if (nums[i] === target) {
                return i
            }
        }
    } else {
        for (let i = 0; i < nums.length; i++) {
            if (nums[i] === target) {
                return i
            }
        }
    }
    return -1
};
//二分查找
var search = function (nums, target) {
    let left = 0, right = nums.length - 1
    while (left <= right) {
        let mid = Math.floor(left + (right - left) / 2)
        if (nums[mid] == target) {
            //找到结果
            return mid
        }
        if (nums[left] <= nums[mid]) {
            //左边一定有序
            if (target >= nums[left] && target <= nums[mid]) {
                //target 在有序的左边
                right = mid - 1
            } else {
                left = mid + 1
            }
        }else if (nums[mid] <= nums[right]) {
            //左边一定无序
            if (target >= nums[mid] && target <= nums[right]) {
                //target 在有序的右边
                left = mid + 1
            } else {
                right = mid - 1
            }
        }
    }
    return -1
};
题号:328
var oddEvenList = function (head) {
    if (head == null || head.next == null) {
        return head
    }
    //left用来记录奇数序列的最后一个,right用来指向最近的一个偶数节点
    //right的下一个节点(如果存在的情况下)就是要挪动到left后面的节点
    let left = head, right = head.next
    while (right && right.next) {
        let midNode = right.next
        right.next = midNode.next

        let tmpNode = left.next
        left.next = midNode
        midNode.next = tmpNode

        left = left.next
        right = right.next
    }
    return head
 };