劍指Offer21.調整陣列順序使奇數偶數前面
阿新 • • 發佈:2021-08-10
題目
輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
示例:
輸入: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 }