成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據結構與算法之按奇偶排序數組II

開發 前端 算法
一道簡單模擬題,來做做看!給定一個非負整數數組 A, A 中一半整數是奇數,一半整數是偶數。對數組進行排序,以便當 A[i] 為奇數時,i 也是奇數;當 A[i] 為偶數時, i 也是偶數。

[[429517]]

一道簡單模擬題,來做做看!

按奇偶排序數組II

力扣題目鏈接:https://leetcode-cn.com/problems/sort-array-by-parity-ii/

給定一個非負整數數組 A, A 中一半整數是奇數,一半整數是偶數。

對數組進行排序,以便當 A[i] 為奇數時,i 也是奇數;當 A[i] 為偶數時, i 也是偶數。

你可以返回任何滿足上述條件的數組作為答案。

示例:

  • 輸入:[4,2,5,7]
  • 輸出:[4,5,2,7]
  • 解釋:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也會被接受。

思路

這道題目直接的想法可能是兩層for循環再加上used數組表示使用過的元素。這樣的的時間復雜度是O(n^2)。

方法一

其實這道題可以用很樸實的方法,時間復雜度就就是O(n)了,C++代碼如下:

  1. class Solution { 
  2. public
  3.     vector<int> sortArrayByParityII(vector<int>& A) { 
  4.         vector<int> even(A.size() / 2); // 初始化就確定數組大小,節省開銷 
  5.         vector<int> odd(A.size() / 2); 
  6.         vector<int> result(A.size()); 
  7.         int evenIndex = 0; 
  8.         int oddIndex = 0; 
  9.         int resultIndex = 0; 
  10.         // 把A數組放進偶數數組,和奇數數組 
  11.         for (int i = 0; i < A.size(); i++) { 
  12.             if (A[i] % 2 == 0) even[evenIndex++] = A[i]; 
  13.             else odd[oddIndex++] = A[i]; 
  14.         } 
  15.         // 把偶數數組,奇數數組分別放進result數組中 
  16.         for (int i = 0; i < evenIndex; i++) { 
  17.             result[resultIndex++] = even[i]; 
  18.             result[resultIndex++] = odd[i]; 
  19.         } 
  20.         return result; 
  21.     } 
  22. }; 
  • 時間復雜度:O(n)
  • 空間復雜度:O(n)

方法二

以上代碼我是建了兩個輔助數組,而且A數組還相當于遍歷了兩次,用輔助數組的好處就是思路清晰,優化一下就是不用這兩個輔助樹,代碼如下:

  1. class Solution { 
  2. public
  3.     vector<int> sortArrayByParityII(vector<int>& A) { 
  4.         vector<int> result(A.size()); 
  5.         int evenIndex = 0;  // 偶數下表 
  6.         int oddIndex = 1;   // 奇數下表 
  7.         for (int i = 0; i < A.size(); i++) { 
  8.             if (A[i] % 2 == 0) { 
  9.                 result[evenIndex] = A[i]; 
  10.                 evenIndex += 2; 
  11.             } 
  12.             else { 
  13.                 result[oddIndex] = A[i]; 
  14.                 oddIndex += 2; 
  15.             } 
  16.         } 
  17.         return result; 
  18.     } 
  19. }; 
  • 時間復雜度O(n)
  • 空間復雜度O(n)

方法三

當然還可以在原數組上修改,連result數組都不用了。

  1. class Solution { 
  2. public
  3.     vector<int> sortArrayByParityII(vector<int>& A) { 
  4.         int oddIndex = 1; 
  5.         for (int i = 0; i < A.size(); i += 2) { 
  6.             if (A[i] % 2 == 1) { // 在偶數位遇到了奇數 
  7.                 while(A[oddIndex] % 2 != 0) oddIndex += 2; // 在奇數位找一個偶數 
  8.                 swap(A[i], A[oddIndex]); // 替換 
  9.             } 
  10.         } 
  11.         return A; 
  12.     } 
  13. }; 
  • 時間復雜度:O(n)
  • 空間復雜度:O(1)

這里時間復雜度并不是O(n^2),因為偶數位和奇數位都只操作一次,不是n/2 * n/2的關系,而是n/2 + n/2的關系!

其他語言版本

Java

  1. // 方法一 
  2. class Solution { 
  3.     public int[] sortArrayByParityII(int[] nums) { 
  4.         // 分別存放 nums 中的奇數、偶數 
  5.         int len = nums.length; 
  6.         int evenIndex = 0; 
  7.         int oddIndex = 0; 
  8.         int[] even = new int[len / 2]; 
  9.         int[] odd = new int[len / 2]; 
  10.         for (int i = 0; i < len; i++) { 
  11.             if (nums[i] % 2 == 0) { 
  12.                 even[evenIndex++] = nums[i]; 
  13.             } else { 
  14.                 odd[oddIndex++] = nums[i]; 
  15.             } 
  16.         } 
  17.         // 把奇偶數組重新存回 nums 
  18.         int index = 0; 
  19.         for (int i = 0; i < even.length; i++) { 
  20.             nums[index++] = even[i]; 
  21.             nums[index++] = odd[i]; 
  22.         } 
  23.         return nums; 
  24.     } 

Python3

  1. #方法2 
  2. class Solution: 
  3.     def sortArrayByParityII(self, nums: List[int]) -> List[int]: 
  4.         result = [0]*len(nums) 
  5.         evenIndex = 0 
  6.         oddIndex = 1 
  7.         for i in range(len(nums)): 
  8.             if nums[i] % 2: #奇數 
  9.                 result[oddIndex] = nums[i] 
  10.                 oddIndex += 2 
  11.             else: #偶數 
  12.                 result[evenIndex] = nums[i] 
  13.                 evenIndex += 2 
  14.         return result 
  15.  
  16. #方法3 
  17. class Solution: 
  18.     def sortArrayByParityII(self, nums: List[int]) -> List[int]: 
  19.         oddIndex = 1 
  20.         for i in range(0,len(nums),2): #步長為2 
  21.             if nums[i] % 2: #偶數位遇到奇數 
  22.                 while  nums[oddIndex] % 2: #奇數位找偶數 
  23.                     oddIndex += 2 
  24.                 nums[i], nums[oddIndex] = nums[oddIndex], nums[i] 
  25.         return nums 

Go

  1. // 方法一 
  2. func sortArrayByParityII(nums []int) []int { 
  3.  // 分別存放 nums 中的奇數、偶數 
  4.  even, odd := []int{}, []int{} 
  5.  for i := 0; i < len(nums); i++ { 
  6.   if (nums[i] % 2 == 0) { 
  7.    even = append(even, nums[i]) 
  8.   } else { 
  9.    odd = append(odd, nums[i]) 
  10.   } 
  11.  } 
  12.  
  13.  // 把奇偶數組重新存回 nums 
  14.  result := make([]int, len(nums)) 
  15.  index := 0 
  16.  for i := 0; i < len(even); i++ { 
  17.   result[index] = even[i]; index++; 
  18.   result[index] = odd[i]; index++; 
  19.  } 
  20.  return result; 

JavaScript

  1. //方法一 
  2. var sortArrayByParityII = function(nums) { 
  3.     const n = nums.length; 
  4.     // 分別存放 nums 中的奇數、偶數 
  5.     let evenIndex = 0, oddIndex = 0; 
  6.     // 初始化就確定數組大小,節省開銷 
  7.     const even = new Array(Math.floor(n/2)); 
  8.     const odd = new Array(Math.floor(n/2)); 
  9.     // 把A數組放進偶數數組,和奇數數組 
  10.     for(let i = 0; i < n; i++){ 
  11.         if(nums[i] % 2 === 0) even[evenIndex++] = nums[i]; 
  12.         else odd[oddIndex++] = nums[i]; 
  13.     } 
  14.     // 把奇偶數組重新存回 nums 
  15.     let index = 0; 
  16.     for(let i = 0; i < even.length; i++){ 
  17.         nums[index++] = even[i]; 
  18.         nums[index++] = odd[i]; 
  19.     } 
  20.     return nums; 
  21. }; 
  22.  
  23. //方法二 
  24. var sortArrayByParityII = function(nums) { 
  25.     const n = nums.length; 
  26.     const result = new Array(n); 
  27.     // 偶數下標 和 奇數下標 
  28.     let evenIndex = 0, oddIndex = 1; 
  29.     for(let i = 0; i < n; i++){ 
  30.         if(nums[i] % 2 === 0) { 
  31.             result[evenIndex] = nums[i]; 
  32.             evenIndex += 2; 
  33.         } else { 
  34.             result[oddIndex] = nums[i]; 
  35.             oddIndex += 2; 
  36.         } 
  37.     } 
  38.     return result; 
  39. }; 
  40.  
  41. //方法三 
  42. var sortArrayByParityII = function(nums) { 
  43.     let oddIndex = 1; 
  44.     for(let i = 0; i < nums.length; i += 2){ 
  45.         if(nums[i] % 2 === 1){ // 在偶數位遇到了奇數 
  46.             while(nums[oddIndex] % 2 !== 0) oddIndex += 2;// 在奇數位找一個偶數 
  47.             [nums[oddIndex], nums[i]] = [nums[i], nums[oddIndex]]; // 解構賦值交換 
  48.         } 
  49.     } 
  50.     return nums; 
  51. }; 

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2023-03-07 08:02:07

數據結構算法數列

2022-01-18 19:13:52

背包問題數據結構算法

2023-03-10 08:07:39

數據結構算法計數排序

2023-03-02 08:15:13

2021-07-16 04:57:45

Go算法結構

2023-04-27 09:13:20

排序算法數據結構

2023-03-13 10:08:31

數據結構算法

2023-03-06 08:10:52

數據結構算法數據

2019-03-29 09:40:38

數據結構算法前端

2021-04-15 09:36:44

Java數據結構算法

2020-10-30 09:56:59

Trie樹之美

2022-09-21 07:57:33

二叉搜索樹排序二叉樹

2022-09-26 07:56:53

AVL算法二叉樹

2020-10-21 14:57:04

數據結構算法圖形

2023-03-08 08:03:09

數據結構算法歸并排序

2021-03-23 08:33:22

Java數據結構算法

2021-03-08 06:28:57

JAVA數據結構與算法稀疏數組

2020-10-20 08:14:08

算法與數據結構

2020-12-31 05:31:01

數據結構算法

2023-10-27 07:04:20

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频日韩 | 成人黄在线观看 | 亚洲视频二区 | 国产精品福利网站 | 国产精品不卡视频 | 亚洲自拍偷拍欧美 | 亚洲一区二区电影在线观看 | 51ⅴ精品国产91久久久久久 | 成人精品国产一区二区4080 | 亚洲电影中文字幕 | 亚洲精品电影在线观看 | 色橹橹欧美在线观看视频高清 | 热re99久久精品国99热观看 | 视频一区二区在线观看 | 欧美日韩电影免费观看 | 亚洲高清在线观看 | 亚洲国产精品人人爽夜夜爽 | 国产一区二区三区久久久久久久久 | 中文字幕成人 | 性一交一乱一透一a级 | 亚洲精品久久久一区二区三区 | 亚洲精品一区久久久久久 | 在线免费观看成人 | 欧美激情一区二区三级高清视频 | 免费在线h视频 | chengrenzaixian| 中文字幕高清免费日韩视频在线 | 国产精品黄 | 中文字幕视频在线观看 | 成人一区二区在线 | 亚洲一区在线免费观看 | 国产精品福利在线 | 亚洲风情在线观看 | 国产色婷婷精品综合在线手机播放 | 91精品国产一区二区三区 | 中国免费黄色片 | 成人污污视频 | 午夜影院视频 | 日日噜噜噜夜夜爽爽狠狠视频97 | 久久精品网| 日韩中文字幕一区 |