首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 常见算法面试题篇(三):高效调整数组数值顺序

题目 今天来看一个考察程序员基本功数组面试题,看起来仍然很简单,不过通过这个题目的不同解法,可以快速检验你是初级程序员还是资深程序员,一起来看下吧: 输入一个整数数组,实现一个函数来调整该数组数字顺序...,使得所有奇数位于数组前半部分,所有偶数位于数组后半部分。...,分别用于存储奇数偶数,然后遍历待排序数组切片,根据是否可以被 2 整除将切片数据分发到偶数奇数切片,最后将偶数切片数据追加到奇数切片之后作为新切片返回。...实现相同功能代码满足最基本正确性基础上,新人和老鸟区别往往就是体现在扩展性、鲁棒性、高性能这些更高层级代码艺术上。...3 == 0 } 性能对比 从扩展性上看,显然第二种解法比第一种好很多,除此之外,我们第二种解法还通过指针移动位运算方式优化了程序性能,具体对性能影响如何,可以编写基准测试来验证: package

36910
您找到你想要的搜索结果了吗?
是的
没有找到

2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n =

答案2023-11-04: go代码用灵捷3.5编写,不需要修改。 大体步骤如下: 1.读取输入整数 n 表示行数。 2.初始化一个大小为 MAXN 字节数组 space,用于存储打印结果。...5.fill 函数根据 from 值,分别处理奇数偶数行: a.如果 from 为 true,即当前为奇数行,则从 m-number*8 开始倒序插入 j 个数字,并将起始值 start 自增。...6.insert 函数根据当前数 cur 插入位置 i 关系,将数字插入到 space 数组: a.根据 cur 位数,计算出数字所占位数 bit。 b.初始化 offset 为 1。...c.根据计算出 offset bit,逐个将数字插入到 space 数组。 d.将剩余位置补充为 *。...最后,根据代码描述步骤分析,可以得出以下复杂度: • 时间复杂度:循环中,每一次 fill 函数时间复杂度为 O(n),insert 函数时间复杂度为 O(1)。

12340

高级数据结构:带边权并查集&拓展域

二、带边权并查集 并查集本质其实就是一个森林,维护是每个子节点根节点关系,带边权并查集顾名思义就是原并查集基础上再维护了一个权值,下面两道例题加以理解。 AcWing 239....每个问题中,小B指定两个数 l r,小A回答 S[l~r] 中有奇数个1还是偶数个1。 机智小B发现小A有可能在撒谎。...表示前i个序列1个数奇偶性,那么题目每次给出L-R1个数奇偶性,实际上就是告诉你s[R] – s[L-1]奇偶性,若为奇则s[R]s[L-1]奇偶性不同,否则相同。...2、C i j,表示询问第i号战舰与第j号战舰当前是否处于同一列,如果在同一列,它们之间间隔了多少艘战舰。 现在需要你编写一个程序,处理一系列指令。...分析 还是用x代表L-1,y代表R,xy都有两种状态:奇偶,用x代表x为奇数情况,x+n代表x为偶数情况,y表示y为奇数情况,y+n表示y为偶数情况。

1.1K20

经典博弈问题动态规划解法

问题 亚历克斯李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。 游戏谁手中石子最多来决出胜负。石子总数是奇数,所以没有平局。...数组每个位置表示dp[i,j],先手可以拿到石头数量后手可以拿到石头数量,那么我们最后要求解就是dp[0,n]先手拿是不是多过后手拿。...先看dp[i,j].first如何求,先手可以有两个选择,拿左边或者右边 拿左边:获取石头数piles[i],剩下石头堆变成后手,即可以获得dp[i+1,j].second数量 拿右边:获取石头数...假如将偶数堆石子按1,2,3,4…n来编号,比如10堆石子就从1到10来编号,那么这10堆一定可以分成2组,编号是奇数编号是偶数堆,而题目又说石子总数是奇数,那么这2组一定是某组数量大于另一组...,要么奇数组大于偶数组,要么偶数组大于奇数组

36520

Python 万能之王 Lambda 函数

Python 提供了非常多内置函数。有不同方法可以执行相同任务,而在 Python ,有个万能之王函数:lambda 函数,它可以不同方式在任何地方使用。...为了大型代码库上编写代码时执行一项小任务,或者函数执行一项小任务,便在正常过程中使用lambda函数。...b = lambda x: "Even" if x%2==0 else "Odd" b(9) 函数只一行 Lambda函数只一行编写创建,而在普通函数中使用缩进 不用于代码重用 Lambda...一个列表中所有偶数 一个列表中所有奇数 一个所有能被三整除 首先假设用普通函数来处理这个问题。...现在使用Lambda函数来解决这个问题,那么可以用三个不同Lambda函数来检查一个待检验数是否是偶数奇数,还是能被三整除,然后结果中加上一个数。

1.4K10

进制算法题(进制转换、AliceBob爱恨情仇)

: = 计算机,数字均通过二进制补码表示,所以学习进制转换尤为重要。...他们轮流对这些饼干进行操作,每次从一堆拿出k^m个小饼干(k为奇数且m≥0,且km不能超出该堆总数)。当一方操作后没有剩余小饼干,则该方获胜。Alice先手,两人都会最佳方法取饼干。...输入格式 第一行:两个正整数n(1≤n≤2×10^5)k(1≤k≤10^9),分别表示饼干堆数每次取出饼干底数。...输出格式 输出一行,包含一个字符串,表示AliceBob之中获胜那个人。 诈骗题。 注意到 k 为奇数,而且每次至少可以取走一个石子。...总结: 一个奇数,由于每次取不超过总数奇数个数饼干,所以我们到最后取完时候一定会取奇数次,同理可得,一个偶数则是取偶数次。

11010

25个让你眼前一亮JavaScript代码技巧

学习强大JavaScript一行代码,能够节省你时间代码量。 1. 将内容复制到剪贴板 为了提高网站用户体验,我们经常需要将内容复制到剪贴板,以便用户可以将其粘贴到指定位置。...怎么判断一个数字是奇数还是偶数?...join('.'); } generateRandomIP() // 220.187.184.113 generateRandomIP() // 254.24.179.151 总结 JavaScript一行代码是节省时间代码强大方式...它们可以用来一行代码执行复杂任务,这对其他开发人员来说非常令人印象深刻。 本文中,我们向您展示了25个厉害JavaScript一行代码,这些代码将让您看起来像个专家。...我们还提供了一些关于如何编写自己JavaScript一行代码技巧。 希望你喜欢这篇文章并且觉得它有帮助。如果你有任何问题,请随时在下方留言。

18830

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组数字顺序,使得所有的奇数位于数组前半部分,所有的偶数位于位于数组后半部分,并保证奇数奇数偶数偶数之间相对位置不变。...对于每个测试案例,第一行输入一个n,代表该数组数字个数。 接下来一行输入n个整数。代表数组n个数。 输出: 对应每个测试案例, 输入一行n个数字,代表调整后数组。...首先,考虑到奇数排在前面,偶数在后面,因此我们遍历数组,找到第一个奇数第一个偶数。...,就是数组元素全是偶数,或者全是奇数,显然就不需要进行其他操作了。...但是如果是1 3 5 6 7,我们找到第一个奇数1第一个偶数6,如果继续按照上面的代码,i<j就会出错。因此我们初始时,判断是否有连续奇数存在,如果存在就寻找到最后一个奇数位置。

54660

深入了解Java数组操作及常用算法题

我们将通过一个具体代码示例来详细说明每个操作实现作用。 Java数组操作是一项基本技能。我们从提供代码开始,逐步分析每个题目,并给出相应解决方案。...// ...之前代码 //题目 1: //编写一个 Java 程序,定义一个整数数组 ,并返回该数组所有偶数。...最终,我们得到了一个新数组arr_new2,其中包含原始数组所有奇数。 // ...之前代码 //题目 2: //编写一个 Java 程序,定义一个整数数组 ,并返回该数组所有奇数。...// ...之前代码 //题目 7: //编写一个 Java 程序,定义一个整数数组 ,并返回一个新数组,其中元素是原始数组最小值最大值。...通过对题目代码分析和解决方案说明,我们了解了每个操作实现方法作用。掌握这些数组操作和算法对于编写高效Java程序非常重要,它们可以帮助我们处理不同类型数据问题。

17410

《剑指offer》专题—算法训练 day01

,进一步说明,目标最小值,mid左侧,让right=mid 这个过程,会让[left, right]区间缩小 这个过程,left永远在原数组前半部分,right永远在原数组后半部分,...大家做这种题目一定要看好,调换奇数偶数时候 ,有没有说明 相对位置是否发生改变.   当然了,这道题原题是不需要保证奇偶位置不变,先给大家说一下 相对位置发生改变题目....一个 left < right 一个循环条件下, 左指针从数组左边开始遍历,遇到偶数就停止,遇到奇数就跳过 右指针从数组右边开始遍历,遇到奇数就停止,遇到偶数就跳过....这两边遍历完之后我们会得到 左边遍历得到偶数下标 ,右边遍历得到奇数下标,此时交换这两个下标的数字 重复以上操作,我们最后得到了一个 奇数在前 偶数在后 (相对位置发生变化) 一个数组序列...// 因为数组可能0出现次数超过长度一半,这里是为了符合逻辑,并不是真正业务代码.

31420

c# linq简介

C#2.0以前,如果要实现这样功能,我们必须使用'foreach'或'for'循环来遍历数组,先找到偶数然后降序排序,相关代码如下: using System; using System.Collections.Generic...,但是C#团队认为他们仍然需要使代码更加紧凑和可读,所以他们C#3.0引入了扩展方法、Lambda表达式、匿名类型等新特性,你可以使用C#3.0这些新特性,这些新特性使用LINQ前提,可以用来查询不同类型集合...} } } 在上面的例子可以看到,我们单个语句中使用LINQLambda表达式指定不同查询条件,因此,LINQ使代码更加紧凑和可读,并且它也可以用于查询不同数据源。...LINQ是一组语言特性API,使得你可以使用统一方式编写各种查询。用于保存检索来自不同数据源数据,从而消除了编程语言和数据库之间不匹配,以及为不同类型数据源提供单个查询接口。...2、更少编码:相比较传统方式,LINQ减少了要编写代码量。 3、可读性强:LINQ增加了代码可读性,因此其他开发人员可以很轻松地理解维护。

1.4K30

程序员进阶之算法练习(六十八)

=sum(b); (因为奇数偶数必定不相同) 问题就变成题目中是否存在一个解,使得sum(a)==sum(b) : 如果有存在,则去掉n个数字奇数; 如果不存在,则不需要去掉任何数字; 注意...我们回到最初判断,我们会首先认为,如果sum(n)是奇数,则无解; 那么假如数组存在一个奇数,我们只要去掉这个奇数即可。 那如果数组中一个奇数都没有呢?...假如数组都是偶数,假设最终分出来两个集合ab,我们对两边集合除以2,不影响sum(a)=sum(b); 如果还是没有奇数,我们可以继续这样操作。容易知道,这样是一定可以找到一个奇数。...; 当区间长度为2时,(a[i][j] + a[i][j+1])/ 2能够整除,那么必须是两个奇数或者两个偶数; 由此我们知道,当k>1时候,肯定每一行数字都是奇数,或者都是偶数;(n=1或者k=...1结果较为简单,这里不做讨论) 那么可以推断出, 如果nk是奇数,那么最终肯定会出现奇数个数字,无法满足要求; 当nk是偶数时,如果n是奇数,则k是偶数,那么平均分配奇偶数时候,必然会在第(n+1

19910

06. 为什么不 ban 猛犸?

依旧先给没有见过这道题目的小伙伴补充一下前置知识,石子游戏 讲的是你小伙伴两个人用几堆石子玩游戏,一共有偶数堆石子,排成一行;每堆都有正整数颗石子,数目为 piles[i] 。...游戏谁手中石子最多来决出胜负,由于石子总数是奇数,所以不存在平局。...对于 [ 5 , 3 , 4 , 5 ] ,先手你可以赢得比赛。 题目让我们去判断一下,给定任意一个数组,假设你对手都能发挥最佳水平,并且是你先手,最终赢得游戏的人是谁?...这道题目同样是一道博弈论问题,答案只有一行代码,先手必胜。...回到标题,为什么 Dota2 第十届国际邀请赛决赛夜,LGD 两局落后情况下连扳两局,有望创造让二追三奇迹时,却选择决胜局不 ban 版本强势英雄猛犸,让对方先手抢到了,最终不敌 TS。

57120

【愚公系列】2021年12月 Java教学课程 19-方法

使用 if 语句 得出 a b 之间最大值,根据情况return具体结果 main()方法调用定义好方法并使用 【 变量保存 】 代码: /* 需求:设计一个方法可以获取两个数较大值...方法重载 6.1 方法重载 方法重载概念 方法重载指同一个类定义多个方法之间关系,满足下列条件多个方法相互构成重载 多个方法同一个类 多个方法具有相同方法名 多个方法参数不相同,类型不同或者数量不同...:设计一个方法用于数组遍历,要求遍历结果是一行。...需求:设计一个方法用于数组遍历,要求遍历结果是一行。...设计一个方法用于获取数组中元素最大值 思路: ①定义一个数组,用静态初始化完成数组元素初始化 ②定义一个方法,用来获取数组最大值,最值认知讲解我们在数组已经讲解过了 ③调用获取最大值方法,用变量接收返回结果

26430

给定一个长度为n数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数偶数部分进行排序

OJ题库ID1007:奇偶数 需求 运行结果 分析 1. 输入n n为数组元素个数 2. 输入n个数 存储到一个数组 3. 用Arrays对数组进行排序 4....找出最大偶数(输出内容最后一个元素后面不带空格,输出最后一个元素是最大偶数) 5. 输出奇数 6....{ /* OJ题库ID1007:奇偶数 给定一个长度为n数组,请将数组中元素按照奇偶性重新划分,所有奇数靠左边,所有偶数靠右边,然后分别对奇数偶数部分进行排序...Input 输入有两行,第一行输入一个数字n表示数组长度, 第二行依次输入n个数字,表示数组元素值。...) { // 由题得最后一个元素后面没有空格(" ") 所以要判断是否是最后一个元素 // 已知奇数偶数右 并且是按照顺序排序 那么最后一个元素就是最大偶数

90020

Java编程题目(三)

歌德巴赫猜想, 任何一个大于六偶数可以拆分成两个质数 /** * @author: 毛利 */public class Gedebahe { /* 任何一个大于六偶数可以拆分成两个质数...循环给二维数组每一个元素赋 0~100 之间随机整数。 按照列表方式输出这些学员每门课程成绩。 要求编写程序求每个学员总分,将其保留在另外一个一维数组。...(只能是奇数格局),放入数字 (数字由),使每行每列以及斜角线 都相等 经验规则: 从 1 开始按顺序逐个填写; 1 放在第一行中间位置; 下一个数往右上 角 45 度处填写; 如果单边越界则按头尾相接地填...认为,可以先把最中间数填到九宫格最中间位置;再按上面的规则逐个填写, 而且 填时候还可以把头尾对应数填到对应格子。...(第 n 个值跟倒数第 n 个值 对应,格局上 间格为轴心对应) ?

99410

21天学习挑战赛之Java方法

使用 if 语句 得出 a b 之间最大值,根据情况return具体结果 main()方法调用定义好方法并使用 【 变量保存 】 代码: /* 需求:设计一个方法可以获取两个数较大值...方法重载 6.1 方法重载 方法重载概念 方法重载指同一个类定义多个方法之间关系,满足下列条件多个方法相互构成重载 多个方法同一个类 多个方法具有相同方法名 多个方法参数不相同,类型不同或者数量不同...:设计一个方法用于数组遍历,要求遍历结果是一行。...Test1 { /* 需求:设计一个方法用于数组遍历,要求遍历结果是一行。...:设计一个方法用于获取数组中元素最大值 思路: ①定义一个数组,用静态初始化完成数组元素初始化 ②定义一个方法,用来获取数组最大值,最值认知讲解我们在数组已经讲解过了 ③调用获取最大值方法,

29420

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券