zoukankan      html  css  js  c++  java
  • 剑指Offer21.调整数组顺序使奇数偶数前面

    题目

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

    示例:
    
    输入:nums = [1,2,3,4]
    输出:[1,3,2,4]
    注:[3,1,2,4] 也是正确的答案之一。
    
    
    提示:
    
    0 <= nums.length <= 50000
    1 <= nums[i] <= 10000
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题方法

    左右指针 与 快慢指针

    时间复杂度O(n),空间复杂度O(1)
    

    代码

    // 左右指针
    func exchange(nums []int) []int {
    	if len(nums) <= 1{
    		return nums
    	}
    	// 定义左右两个指针
    	left,right := 0,len(nums)-1
    	// 两指针相遇是循环结束
    	for left < right{
    		// 如果左指针元素为偶数,右指针为奇数,两元素进行交换
    		if nums[left]%2==0&&nums[right]%2!=0{
    			nums[left],nums[right]=nums[right],nums[left]
    		}
    		// 左指针一直往右移动,直到为奇数
    		for left < right && nums[left] % 2 != 0{
    			left++
    		}
    		// 右指针一直往左移动,直到为偶数
    		for left < right && nums[right] % 2 == 0{
    			right--
    		}
    	}
    	return nums
    }
    
    // 快慢指针
    func exchange2(nums []int) []int {
    	if len(nums) <= 1{
    		return nums
    	}
    	// 定义两个快慢指针,快指针先走,左指针指向待替换的元素,快指针找到下一个需要替换的奇数
    	for low,fast := 0,0;fast < len(nums);fast++{
    		// 当快指针找到奇数时进行替换
    		if nums[fast] % 2 != 0{
    			nums[low],nums[fast] = nums[fast],nums[low]
    			low++
    		}
    	}
    	return nums
    }
  • 相关阅读:
    Daily Scrum 10.31
    Daily Scrum 10.30
    Daily Scrum 10.29
    Daily Scrum 10.28
    扩展设置
    安装
    james+javamail入门
    解决ZF2_PATH environment
    Apache Httpd Server 2.2升级2.4
    缓存,spring
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15125187.html
Copyright © 2011-2022 走看看