LeetCode每日一题(12)——按奇偶排序数组(双指针)

简介: 按奇偶排序数组1.题目2.示例3.思路4.代码

1.题目


给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。


返回满足此条件的 任一数组 作为答案。


2.示例


示例 1:


输入:nums = [3,1,2,4]

输出:[2,4,3,1]

解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3]也会被视作正确答案。


示例 2:


输入:nums = [0]

输出:[0]


提示:


1 <= nums.length <= 5000

0 <= nums[i] <= 5000


3.思路


题目很简单,我最先想到的是分别找出所有偶数和奇数,再进行拼接。但是感觉这样需要额外的空间,所以想到了双指针,直接修改原数组的顺序。

从数组的两端同时遍历,左端指针位置遇到奇数与右端指针位置交换数据,右端指针位置遇到偶数与左端指针位置交换数据,奇偶符合要求则指针向中间移动,相遇则排序完成。


4.代码


func sortArrayByParity(nums []int) []int {
  front := 0
  after := len(nums)-1
  var temp,i int
  for after > front {
    fmt.Println(i)
    i++
    if nums[front] % 2 != 0 {
      temp = nums[front]
      nums[front] = nums[after]
      nums[after] = temp
      fmt.Printf("%v和%v交换位置\n",nums[front],nums[after])
    }else {
      front++
    }
    if nums[after] % 2 == 0 {
      temp = nums[after]
      nums[after] = nums[front]
      nums[front] = temp
      fmt.Printf("%v和%v交换位置\n",nums[after],nums[front])
    }else {
      after--
    }
  }
  return nums
}
相关文章
|
1天前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(中)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
11 0
|
1天前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
11 0
|
6天前
|
索引
LeetCode438题(无敌双指针——滑动窗口)
LeetCode438题(无敌双指针——滑动窗口)
|
6天前
|
存储 人工智能
指针的应用练习(数组与指针的关系)
指针的应用练习(数组与指针的关系)
15 0
|
6天前
|
存储 人工智能
字符指针变量和字符数组注意事项(区别)
字符指针变量和字符数组注意事项(区别)
8 0
|
6天前
指针的基础应用(数组的颠倒和排序,二维数组的表示)
指针的基础应用(数组的颠倒和排序,二维数组的表示)
7 0
数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结
数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结
|
6天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
6天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
13 0
|
6天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0