本文主要是介绍按奇偶排序数组 和 删除排序数组中的重复项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:按奇偶排序数组
给定一个非负整数数组 A
,返回一个由 A
的所有偶数元素组成的数组,后面跟 A
的所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
示例:
输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
解法:
public int[] sortArrayByParity(int[] A) {if(A.length == 0 ) return null;int index = 0;for(int i = 0;i<A.length;i++){if((A[i] & 1) == 0){int temp = A[i];A[i] = A[index];A[index++] = temp;}}return A;}
二、删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。
思路:
数组完成排序后,我们可以放置两个指针 i 和 j,其中 i 是慢指针,而 j 是快指针。只要 nums[i] = nums[j],我们就增加 j 以跳过重复项。
当我们遇到 nums[j]!= nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j])的值复制到 nums[i + 1]。然后递增 i,接着我们将再次重复相同的过程,直到 jj到达数组的末尾为止。
解法:
public int removeDuplicates(int[] arr) {int index = 0;for (int i = 1; i < arr.length; i++) {if (arr[index] != arr[i]){index++;arr[index] = arr[i];}}return index + 1;}
这篇关于按奇偶排序数组 和 删除排序数组中的重复项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!