位运算判断奇偶数_位运算判断奇偶数_title: LeetCode922奇偶数组排列——细想与逻辑...

2023-10-11 13:50

本文主要是介绍位运算判断奇偶数_位运算判断奇偶数_title: LeetCode922奇偶数组排列——细想与逻辑...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3052e37511877faf89fda050a2e61410.png

title: LeetCode922奇偶数组排列——细想与逻辑 date: 2019-02-28 11:37:15 tags: LeetCode系列

LeetCode922:奇偶数组排列——细想与逻辑

LeetCode的922题目是:

给定一个非负整数数组 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] 也会被接受。

先说说这个题的解法和三个思路,然后我再讲讲从这个题延伸的思路和做事的是的原则

基础版本:

class Solution:

def sortArrayByParityII(self, A: 'List[int]') -> 'List[int]':

even,odd=[],[]

result=[]

for n in A:

if n%2==0:#如果是偶数

even.append(n)

else:#如果是奇数

odd.append(n)

while odd and even:#交替排列

result.append(even.pop())

result.append(odd.pop())

return result

分析&解题:通过题目我可知,数组最终排列的是偶数和奇数交替排列,所以我们最开始想的就是,把一个混乱的数组以奇数和偶数的队列分开,然后我们把偶数列表和奇数列表里面的数交替放到最终返回结果的那个列表里面。 这样做比较直观,我们打题目做了分解,先区分再合并。

进阶I:

class Solution:

def sortArrayByParityII(self, A: 'List[int]') -> 'List[int]':

i,j=0,1

while i

if A[i]%2!=0:

while A[j]%2!=0:

j+=2

A[i],A[j]=A[j],A[i]#将i号位和j号位做了替换

i+=2

return A

分析&解题:在原有的队列中,一开始我们设置一号位和二号位(i=0,j=1),我们从一号位遍历这个数组,如果偶数位不是偶数,我就在奇数位去找偶数,然后找到奇数位的偶数,我将前面偶数位的奇数和奇数位的偶数调换(ps;这里的调换语句——>A[i],A[j]=A[j],A[i]). 这里我们i+=2和j+=2是因为,我i代表偶数位,j代表奇数位,所以我们+2是为了保证i都为偶数,j都为奇数。

进阶II:

class Solution:

def sortArrayByParityII(self, A: 'List[int]') -> 'List[int]':

i,j=0,1

list=[0]*len(A)

for n in A:

if n&1==0:

list[i]=n

i+=2

else:

list[j]=n

j+=2

return list

分析&解题:我们先创造一个长度为len(A)的队列list,里面的而数据以0填满。遍历原有队列A,里面如果是奇数,就让这个数进入list的奇数位,如果这个数为偶数,就让这个数进入list的偶数位。 里面判断奇偶数的方法是(n&1),符号&是一个位运算,如果是偶数: n&1==0,,如果是奇数:n&1!=0。

算法思路和做事原则

这个题目的思路其实比较简单,就是把奇数和偶数交叉排列,所以一开始的想打就是先分组,再合并。但是这有一个问题就是我们做了很多的重复性工作,算法的复杂度会很高。进阶的算法思路是: 减少分组和合并的步骤,直接盯着偶数位去看,如果偶数位不是偶数,那么我们就说明奇数位中一定有一个是是偶数,所以我把这两个交换一下,则改变原来的列表就好。第二个进阶的方法是,先创建一个新列表list,我们遍历原列表,如果是奇数我们就放在list的奇数位,如果是偶数,我们就放在list的偶数位,在这个算法中我们只创建了一个内存空间,遍历了一次列表,和基础算法比起来,简单了许多。 那么其实我们已经可以知道了,什么是好的算法,好的算法就是尽量少做事情。而我们做事的原则应该是,如果你是第一次在做这样的事情,你要先回基本的算法,它是你完成这样工作的基础(先得到60分),但是很耗时间和空间,因为他是复杂的算法,当你持续了解这个题目或者你做的事情,你的要想想如何才能少做事情,尽可能的降低时间和空间的使用,得到一个好算法(达到80——90分)。其中参考其他的方法,并且理解他的思路,这个很重要。 下一次我在聊聊大局和细节的关系。

这篇关于位运算判断奇偶数_位运算判断奇偶数_title: LeetCode922奇偶数组排列——细想与逻辑...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/188487

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的