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 |
相关文章推荐
- lintcode-合并排序数组II-64
- LintCode 64 合并排序数组 II
- lintcode-64-合并排序数组 II
- LintCode 63 搜索旋转排序数组 II
- lintcode-60-搜索插入位置
- 【LintCode 简单】64. 合并排序数组
- lintcode-63-搜索旋转排序数组 II
- 【LintCode 简单】142. O(1)时间检测2的幂次
- 【LintCode】合并排序数组 II
- lintcode-142-O(1)时间检测2的幂次
- LintCode-6合并排序数组 II(C++)
- LintCode-合并排序数组 II
- LintCode-合并排序数组 II
- LintCode-合并排序数组 II
- Lintcode 合并排序数组 II
- LintCode【简单】6. 合并排序数组 II,9. Fizz Buzz 问题。代码及思路 ——【vector用法】
- python_lintcode_177. 把排序数组转换为高度最小的二叉搜索树_156. 合并区间
- 【LintCode 简单】6. 合并排序数组 II
- lintcode python 容易 60.搜索插入位置
- LintCode 合并排序数组 II