Swift.调整数组顺序使奇数位于偶数前面

题目描述:调整数组顺序使奇数位于偶数前面。 i c } m l p a o s r s f } t u F n F o c o r v v v w } r u 1 R a a a h e n 4 e r r r i t d S o l u a o r s l r e w } w } l s s l r r t l d e i h h e [ [ e i n i u e = f g l i i t l r f g o t r t h e l l e i t h s n i O n t f e l e r t f g t o d = t e i e t h + n d = l f l g m ] t = - E 0 < e t e h p ] = { v n f f t = 1 e . r t + t = = 1 n c i = - s ( o g < < = s [ t _ u h 1 [ r e n t r r 1 l i m n t i i e g p : { g g f h - h h t t [ t t ] ] I 1 n & & t & & ] ) s s [ [ l r e i f g [ t h I ] t n ] t % ] % 2 { 2 ! = ! = 0 1 { { 算法思想:两个指针一个从头一个尾,然后奇数偶数交换位置。 ...

2015-07-08 · 2 min · 268 words · cubegao

Swift.在0(1)时间删除链表节点

题目描述:在 O(1) 时间内删除链表节点 i c } m l p a o s r s f } t u F n F o c o r v i } i } } } r u 1 d a f f e e n 3 e r l e t d S l p p s l u a o e p r D p p e p s l w } p p r t l t = e e / D D / e / e h ? n i u e = = t l 删 e e i 删 = 删 t i . = o t N u e 除 l l f 除 { 除 l n p n i o h n r t 的 e e 的 n 的 s e p e s o d e i n e 不 t t p 是 i 是 x n e a l d 是 e e 头 l 尾 = p = t ( d p ? 尾 d d = 结 节 ? { _ . 节 ? ? = 点 点 p . p = n 点 . . = , n ? h e v n 只 e . n e p x a e p 有 x n i a D t l x D 一 t e l d e t e 个 x : l ! = l 节 ! t e = = e 点 = L t ( t = i e n p p e s d i D D d p t l e e D N = l l { e o = { e e l d t t e e n e e t ? i d d e , l ? ? d _ . . { n n { p e e D x x e t t l ? ? e . . t v n e a e d l x : ) t ! L i s t N o d e ? ) L i s t N o d e ? { 算法思想:① 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。 ② 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。 ...

2015-07-07 · 2 min · 366 words · cubegao

Swift.打印1到最大的n位数

题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。 i c } m l p a o s r s f } f } f } t u u u F n n n F o c c c o r v w } v v v f } r v f } r u 1 p a h i a a a o e p a o e n 2 r r i n r r r r t r r r t d S i l c u i u a o n n e p r i c s i s i } i } } r n i r i } i r t l t u r e s a u n u f f e n t n f n n i u M m ! i m O r m d m l P d i d o t a s i n e v r e i s s i r e n r e S n i x n t n e y = x = n s u i } } e n b s e x b x t o ( = c ( t r d u m f e u r O S n ! r r n _ r p N F = 0 i I e m l { m e v t = u = e + i A e r u l n n x > i s s a e r m a = n { n r m i m o 0 t + = n i e s c n [ k r i 0 s " k g : r e n b w ( ( = = d s u a u i ; F n 0 1 ( a n t e 0 n = 1 e O { m r m n l g { " n I y t P r = . u 1 0 x v r s d o ( u n ( N r ( . m n e - y [ e w _ { m t r u e _ f < s u { = r = i x s ) e m S a n [ m = F = n ] n [ p b t n l u i s l 1 d u n { e e r u s m n . 0 o 0 1 e = m u a r i m e s d c w x s m t ( n s . e o { ] S : s i & g : c x u = t . n n ( o ] n = r S i g u n i u ) t t i t n : m u n n ! r " n r d s m o t - u 0 g i e " ) s u ) + e " ( n x 0 . t . 1 s g ( " { j r c u ) n , o [ e a { m u i S v r ) m c n t e r s o e r r y . u d i s S s n ( n e t t t ) g d r a : ) ] ( i r ) ) ) n t n g I ) { n { d e B x o , o l o f { f s e t B y : i n d e x ) . . . ] ) 算法思想:由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 char 数组进行存储。使用回溯法得到所有的数。 ...

2015-07-07 · 3 min · 632 words · cubegao

Swift.数值的整数次方

题目描述:给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。 i c } m l p a o s r s f } t u F n F o c o r v v i } } } v w } r u 1 p a a f e e a h e n 1 o r r l l r i t d S w e s s l u a o e b e e e i } e e r r e i } b e r t l r a x > x f x e e f a x n i u ( s p p i p { t s e s p o t _ e o 0 o f b o u x e e o e n i n n a r n r : p x r n o b = e { e e s e e n o p e * e > n : n n e t n D n o s = n b t t < u t 1 o e n t 0 { D = r u n e * b o = = 0 = n = b t n = a = ? u l t s b 0 e { 0 0 - e ! b e e r l e = & a x e e { = s p s , / 0 1 e o _ 分 1 n : 母 { = e e 不 = n 1 : 能 t / 为 1 > r I 0 > e n { 1 s t ) D o u b l e { 算法思想: /** ...

2015-07-07 · 2 min · 300 words · cubegao

Swift.求1+2+...+n

题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 i c } m l p a o s r s f } t u F n F o c o r v n r u 4 a a u e n 6 d r m t d S d > u a o S r 0 r t l u e n i u m s & o t ( & r n i _ = e o ( s n n 0 r u e { m s : = I n n t u ) m + a I d n d t S u { m ( n u m - 1 ) ) = = 算法思想:累加不能用循环的话,那就试试递归吧。 ...

2015-07-06 · 1 min · 113 words · cubegao

Swift.二进制中1的个数

题目描述:输入一个整数,输出该数二进制表示中 1 的个数。 c } l a s s f } f } u u F n n o c c r v v w } r v v w } r 1 f a a h e f a a h e 0 i r r i t i r r i t S n l u n l u o d s c e i } s r d s c e c s r l O o f n O o o n u n = u s = n = u s u = t e n s c e n n c i ( n t ! c s o 2 n t ! t s o o _ = & o > u ( = u n = u > n _ = + & n n 0 1 n 1 t 0 = t { : 0 t n 0 ( { = : { 1 s I = + n = I - t 1 n ) 1 t 1 { ) ) I n I t n t { { 算法思想:n&(n-1),该位运算去除 n 的位级表示中最低的那一位。 ...

2015-07-05 · 1 min · 193 words · cubegao

Swift.斐波那契额数列

题目描述:求斐波那契数列的第 n 项。 i c } m l p a o s r s f } f } t u u F n n F o c c o r i } i } i } r i } i } v v v f } r u 0 F f f f e F f f a a a o e n 9 i t i r r r r t d S b n n u b n n u a o o r r n r r o r r l l r i i } r t l n < e = e e n n = e = e a a e f n i u a = t = t > t a = t = t s s s i o t c u u u 0 c u u t t n i r n i c 0 r 1 r 1 r c 0 r 1 r l = r l l e o i n n n i n n a = 0 > e a a s n ( { { { 2 { { s 0 . s s s _ 0 1 F ( 0 1 t 1 . 1 t t { i _ < = l n b = n { a = : o n + l s n : 0 1 a t r I a s e n c I { t = s t c n ) i t + l ( ) a n l s - a t 1 s I ) t n I l t + n a t s { F t i { b o n a c c i ( n - 2 ) 算法思想:如果使用递归求解,会重复计算一些子问题。例如,计算 f(4) 需要计算 f(3) 和 f(2),计算 f(3) 需要计算 f(2) 和 f(1),可以看到 f(2) 被重复计算了。 递归是将一个问题划分成多个子问题求解,动态规划也是如此,但是动态规划会把子问题的解缓存起来,从而避免重复求解子问题。 ...

2015-07-04 · 2 min · 315 words · cubegao

Swift.旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 i c } m l p a o s r s f } f } f } t u u u F n n n F o c c c o r v r i } i } i } i } r v v w } r u 0 f a e f f f f f e m a a h e n 8 i r t i t i r r i t d S n u n l n n n u n l u a o d s r d e r [ r [ r [ r r ( r r e i } r r t l M n ( f e l e l e m e n _ e f n i u i = _ t t e t e t i t s = r + o t n f u f u f u d u n n r = r n i ( n i n = r t r t r + r [ : = l < e r e o _ n : = n ] n ] n 1 n l e = s e 1 s n d ] e [ n f s n ( i m n = m > f f f I [ t r > { : & n i [ = i i > i t n l i = s o d r n n n n ] t e + g n [ , u i n ( [ d n d ] f h [ n I t { g [ n m ( [ ( > , t 1 t r [ n 0 h r , i & r & _ ] ] r t , [ t i d n i n n { ] ] I ] g l ] , g , [ l { ) ( n h e l h m m e n t t f { e t i i f . ] ] t f ] d d t c , , t + + : o _ & , { 1 1 I u & r ( , ] I n n l i l ( n t t e n g e m ? t - f [ h f i , { 1 t l t t d n _ ) : e ) + + [ / f m r m r 2 I t i i i i , n ] d g d g t ) h + h n , = / t 1 t . _ = 2 / ] : c , 2 o m n m ) : I u i [ i , n n d m d r n t t : i ) i [ ) - d g l 1 I ] h e ) n t f t { ) t , ] I _ n t r i { g h t : I n t ) I n t { 算法思想:将旋转数组对半分可以得到一个包含最小元素的新旋转数组,以及一个非递减排序的数组。新的旋转数组的数组元素是原数组的一半,从而将问题规模减少了一半,这种折半性质的算法的时间复杂度为 O(logN) 此时问题的关键在于确定对半分得到的两个数组哪一个是旋转数组,哪一个是非递减数组。我们很容易知道非递减数组的第一个元素一定小于等于最后一个元素。 ...

2015-07-03 · 3 min · 529 words · cubegao

Swift.重建二叉树

题目描述:根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 i c } m l p a o s r s f } f } f } t u / u / u F n 不 n 能 n F o c 能 c 改 c o r v v r v l v w } f } r 改 i } l p f } r 变 i } l p f } r u 0 r a a e / a a e a / a h o e 变 r f e r o e 输 r f e r o e n 6 e r r t 下 r r t r 左 r i r t 输 e t i r t 入 e t i r t d S b u 面 子 l u 入 c s n u c p n u a o u p i r 是 r t r r 树 l e l ( v i } } } r u t r r t i i } r u r r r t i i } r t l i n 循 o r e i 长 e e i a f e e n r a e o ( n f n r e e o ( n f n i u l = = 环 o e s g 度 f i f r l l s r t o r d s O t o r d o t d r t e h t n t , i s s r i t u t o e i r i r u t o e i r n i T p i e V = t L O L f c e f w } e f l i } w } e v P r o x n r r b o v d r o x n p r r b o o r r n c a = T e r e n i = o i h i e f h s e r n = t O o o r o e e n = t O r o o r o n e e O u l t r n d n ) n = n i n i { n t i 1 e . i r o o e t 2 r . i r i o o e t e O r r u T r e e d t f d l d f l ( n T v n d t t a ( . n T v n d n t t a { 1 r d s e r e e = r + i I 0 i I e i } } f I r i r e i } } f _ > i r a e . . k _ c i r a e t . . k ( d e i e e [ = n n n i n / f e i n i n / o f e i l e l s r l r o l e l s r ( l r _ e r v = e = 0 l d { u d f 从 l n d g d 右 o f l n p e e ) t [ e i p u e ) t [ " e i r e N e 1 p e e < e i 左 i s d e h I 子 t i i s d r n N a i f g r n N a i \ f g p 2 p o t f r x = x n 向 n t t r b e t t r b I x t n 树 V n n r r r b e r r r b I e d o r n t h e t o r n ( t h r ( r d r t e d 右 O r r o r r r o r n L d 的 a d O i i o r i i o r n O P d t d t O d t d s t e & e e e L O = l = I 查 r e e o e i e e o e d = e e 第 l I r g g o e i g g o e d r r e I e = r = e I e t = O p O ( e e r e n 找 d e e t a f e e t a e n x 一 u n d h h t a f h h t a e d e ( n x = d = ( n x a = r , r r n d 0 f 0 d , e . V k . V k x l 个 e d e t t V k t t V k x e p . ] r e p . ] r r d d o ] e t e 先 r r = a i l = a e = = 节 e r T T a i T T a r r . e r r 0 r . t e r e & e o r L x 找 [ i l n e l + f = 点 = x [ r r l n r r l + : e . = c e : e . = I c e r i r t ! . e 到 f g t u O f t u = t p f e e u O e e u = O e = u c O e = n u c : , [ V = e n < 根 i h r e r t r e L r i n < i e e e r e e e i s r n r u i r n ) r u 0 a n = 节 n t e d e 1 e e = n . d . 1 n t d d r s r n d d r + s r [ 0 ] l r u { 点 d e = e = e = n O { d r = = e l = = o a e I o i s o s e I o + i s I , u o m l , I = . r . r r I i r e u r r n o v i u t r n + v i n e o e e 说 n r n [ T l n + d i n g r n [ f r n t t [ t e v t a . t e v t i ) t r f 明 d T i f r e e g d h i f t i I s { . 1 e r r { . ( 2 e ] . V a t n e r g i e f 1 r h e t g i g [ n t v ( 1 [ t e v i ( 2 , c a t L 在 x e h n e t . t x h n = h I a a & ( I I m a n & ( o l e e 右 ] e t d N ! c L ] = t d t n > r l p & n n o l d p & _ u u d n 子 N ! I o o e T I T T t t r p t v e r p n e ( 树 = o n d u n = T r n r r ] e P { e r ] > e { x e r i t ) { 上 = d d e n = r e d e e , n r O e , F ) O e n - { e e ( t { e e e e e _ d e r O e i + r O O 1 { r ( x n r e . x N . I ] d r _ n r + d r r ) o n ] ) - o N r ] o l s n ) e d d s + e d d o ) o o i d e t r e i I t \ r e e t = 1 t d g = e f a , r n n ( ( , r r V = V e h = ( t r { , O ) e , : a a ( t n ! t s r ) n & l n l n ! n ) P t s d { d i & [ u u ) r a t e I n i I e { e { e r a r n O n n : t r : ) r O t { { P t " d r ] I r P i ) e d n e r n r e ) t + e o , r , 1 + u , _ , ( t s i t i e s n [ a n T n t d I r d r d a e n t e e P r x t I x e r t - ] n + N e P s , , 1 o : r t _ , d e a i e I + r s n e ? n ( t t d n t i I a e d { , n n r x I d ) t - n _ e + I 1 ) x 1 n ) i - , : n s O t e I r a n n d r d t e t P , r I r _ : n e ) , e i , n n & d o & i I u i n n t n O : O r [ r d I I d e n n e r t t r , ) ] , , i _ s n t d s a e T t r x r a t + e r I 1 e t n , N I , o n e d : i n e n d ? I d I n e n { t x ) , - _ 1 ) e n d I n : I n t ) T r e e N o d e ? { 算法思想:前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。然后分别对左右子树递归地求解。 ...

2015-07-02 · 9 min · 1840 words · cubegao

Swift.从尾到头打印链表

题目描述:输入一个链表,从尾到头打印链表每个节点的值。 i c } m l p a o s r s f } t u F n F o c o r i } p u 0 p f r n 5 r i d S i h n a o n e p t t l t a r ( i u L d i h o t i ? n e n i s . t a o t n L d n N e i ! o x s . { d t t v e N a ( ! o l _ = d ) e h n ( e i h a l e d a : { d ? L . i n s e t x N t o ) d e ? ) { 算法思想:采用递归的解法,利用栈的原理。 ...

2015-07-01 · 1 min · 135 words · cubegao