(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】

这篇具有很好参考价值的文章主要介绍了(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

❓剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

难度:简单

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

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。

提示

  • 0 < = n u m s . l e n g t h < = 50000 0 <= nums.length <= 50000 0<=nums.length<=50000
  • 0 < = n u m s [ i ] < = 10000 0 <= nums[i] <= 10000 0<=nums[i]<=10000

💡思路:双指针

  1. 先从 nums 左侧开始遍历,如果遇到的是奇数,就表示这个元素已经调整完成了,继续从左往右遍历,直到遇到一个偶数。
  2. 然后从 nums右侧开始遍历,如果遇到的是偶数,就表示这个元素已经调整完成了,继续从右往左遍历,直到遇到一个奇数。
  3. 交换这个偶数和奇数的位置,并且重复两边的遍历,直到在中间相遇,nums 调整完成。

🍁代码:(C++、Java)

C++

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int l = 0, r = nums.size() - 1;
        while(l < r){
            //从前往后找到第一个偶数
            while(l < r && nums[l] % 2 != 0) l++;
            //从后往前找到第一个奇数
            while(l < r && nums[r] % 2 == 0) r--;
            //交换
            swap(nums[l++], nums[r--]);
        }
        return nums;
    }
};

Java

class Solution {
    public int[] exchange(int[] nums) {
        int l = 0, r = nums.length - 1;
        while(l < r){
            //从前往后找到第一个偶数
            while(l < r && nums[l] % 2 != 0) l++;
            //从后往前找到第一个奇数
            while(l < r && nums[r] % 2 == 0) r--;
            //交换
            int temp = nums[l];
            nums[l++] = nums[r];
            nums[r--] = temp;
        }
        return nums;
    }
}
🚀 运行结果:

(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】,LeetCode,leetcode,算法,职场和发展

🕔 复杂度分析:
  • 时间复杂度 O ( n ) O(n) O(n),原数组中每个元素只遍历一次。
  • 空间复杂度 O ( 1 ) O(1) O(1),原地调整,只消耗常数空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!文章来源地址https://www.toymoban.com/news/detail-661059.html

注: 如有不足,欢迎指正!

到了这里,关于(排序) 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 ——【Leetcode每日一题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (排序) 剑指 Offer 45. 把数组排成最小的数 ——【Leetcode每日一题】

    难度:中等 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 提示 : 0 nums.length = 100 说明: 输出结果可能非常大,所以你需要返回一个字符串而不

    2024年02月10日
    浏览(50)
  • 剑指 Offer 56 - II. 数组中数字出现的次数 II(位运算 / 哈希表 / 排序)

    链接:剑指 Offer 56 - II. 数组中数字出现的次数 II 难度:中等 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums = [9,1,7,9,7,9,7] 输出:1 限制: 1 = nums.length = 10000 1

    2024年02月13日
    浏览(41)
  • 【调整奇数偶数顺序】

    输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分。 这道题首先用到的方法是冒泡排序的思想,首先通过冒泡排序筛选出不能被2整除的数就是奇数,然后再将这些数和偶数交换位置进行

    2024年02月13日
    浏览(41)
  • 每天一道leetcode:剑指 Offer 53 - I. 在排序数组中查找数字 I(适合初学者&二分查找)

    统计一个数字在排序数组中出现的次数。 0 = nums.length = 10^5 -10^9 = nums[i] = 10^9 nums 是一个非递减数组 -10^9 = target = 10^9 使用两次二分查找找到target在数组中的左右边界,然后长度就是右边界减去左边界再加一,最后返回长度即可。   欢迎大家在评论区讨论,如有不懂的代码部分

    2024年02月14日
    浏览(56)
  • 【LeetCode】剑指 Offer(21)

    目录 题目:剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 40. 最小的k个数 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 这道题,我的思路是直接排序, 然后返回中间

    2023年04月10日
    浏览(65)
  • 剑指 Offer. 翻转单词顺序

    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串\\\"I am a student. \\\",则输出\\\"student. a am I\\\"。 示例 1: 示例 2: 示例 3: 代码如下:

    2024年02月15日
    浏览(45)
  • 剑指offer刷题笔记--Num21-30

    目录 1--调整数组顺序使奇数位于偶数前面(21) 2--链表中倒数第 k 个节点(22) 3--反转链表(24) 4--合并两个排序的链表(25) 5--树的子结构(26) 6--二叉树的镜像(27) 7--对称的二叉树(28) 8--顺时针打印矩阵(29) 9--包含min函数的栈(30) 主要思路:         双指针

    2024年02月12日
    浏览(42)
  • 剑指 Offer 58 - I. 翻转单词顺序

    剑指 Offer 58 - I. 翻转单词顺序 不用内置方法 去除首尾空格和中间多余空格 翻转所有字符 翻转每个单词 用自带的 trim() 和 substring() ,要自己实现这两个方法也很简单。

    2024年02月11日
    浏览(35)
  • 《剑指offer》(3)排序算法篇

    class Solution:     def duplicate(self , numbers: List[int]) - int:         if len(numbers) = 1:             return -1         import collections         num_dict = collections.Counter(numbers)         res = [key for (key,value) in num_dict.items() if value 1]         return res[0] class Solution:     def sort(self,num): #快排

    2024年02月13日
    浏览(37)
  • 【剑指offer】数据结构——数组

    【剑指offer】03.数组中重复的数字 //03. 数组中重复的数字 // 找出数组中重复的数字。 // 力扣 // 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 // 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每 // 个数字重复了几次。请找出数组中任意一

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包