您的位置:首页 > 编程语言 > Python开发

python_lintcode_64合并排序数组 II_60搜索插入位置_142 O(1)时间检测2的幂次

2017-09-25 17:11 555 查看

64合并排序数组 II

题目

http://www.lintcode.com/zh-cn/problem/merge-sorted-array/

合并两个排序的整数数组A和B变成一个新的数组。

注意事项

你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。

样例

给出 A = [1, 2, 3, empty, empty], B = [4, 5]

合并之后 A 将变成 [1,2,3,4,5]

思路

本道题一开始的A内有m+n,其中后n个都是0,题意就是需要我们把0都替换为B的值

代码

class Solution:
"""
@param: A: sorted integer array A which has m elements, but size of A is m+n
@param: m: An integer
@param: B: sorted integer array B which has n elements
@param: n: An integer
@return: nothing
"""
def mergeSortedArray(self, A, m, B, n):
# write your code here
#
if n==0:return A
for i in range(n):
A[i+m]=(B[i])
A.sort()
return A


60搜索插入位置

题目

http://www.lintcode.com/zh-cn/problem/search-insert-position/

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。

您在真实的面试中是否遇到过这个题? Yes

样例

[1,3,5,6],5 → 2

[1,3,5,6],2 → 1

[1,3,5,6], 7 → 4

[1,3,5,6],0 → 0

思路

先判断是否在列表中,在的话返回它的索引

没有的话,将其插入到列表中,然后再升序,然后在返回其索引

代码

class Solution:
"""
@param: A: an integer sorted array
@param: target: an integer to be inserted
@return: An integer
"""
def searchInsert(self, A, target):
# write your code here
if len(A)==0:return 0
if target in A:return A.index(target)
A.append(target)
A.sort()
return A.index(target)


142 O(1)时间检测2的幂次

题目

http://www.lintcode.com/zh-cn/problem/o1-check-power-of-2/#

用 O(1) 时间检测整数 n 是否是 2 的幂次。

Have you met this question in a real interview? Yes

Example

n=4,返回 true;

n=5,返回 false.

思路

本次题目中,负数都是不满足要求

几种解法,一种是直接用while,进行循环一层层判断(n/2)%2是否为0

另外一种是用位运算,例子用的是与运算,2的幂次,二进制表示下只有单独的一个1,而它2的幂-1,是从单独的位置,后面全部补1.

64: 0100 0000
63: 0011 1111
&(与运算) : 0000 0000 =0


-

解法1代码

class Solution:
"""
@param: n: An integer
@return: True or false
"""
def checkPowerOf2(self, n):
if n<=0:return False
#%求余数,/求除法,//求商
while n%2==0:
n=n/2
if n==1:
return True
return False


解法2代码

class Solution:
"""
@param: n: An integer
@return: True or false
"""
def checkPowerOf2(self, n):
if n>0 and ((n&(n-1))==0):return True
return False


运算符描述例子
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a|b)输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111
详细查看:http://www.runoob.com/python3/python3-basic-operators.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: