zoukankan      html  css  js  c++  java
  • interview_binarysearch

    1.search range

     

     1 class Solution(object):
     2     def searchRange(self, nums, target):
     3         res=[-1,-1]
     4         if(len(nums)==0):
     5             return res
     6         
     7         left,right=0,len(nums)-1
     8         while(left+1<right):
     9             mid=left+(right-left)//2
             #mid=left+((right-left)>>1) 10 if(nums[mid]==target): 11 right=mid 12 elif(nums[mid]<target): 13 left=mid+1 14 else: 15 right=mid-1 16 if(nums[left]==target): 17 res[0]=left 18 elif(nums[right]==target): 19 res[0]=right 20 21 22 left,right=0,len(nums)-1 23 while(left+1<right): 24 mid=left+(right-left)//2 25 26 if(nums[mid]==target): 27 left=mid 28 elif(nums[mid]<target): 29 left=mid+1 30 else: 31 right=mid-1 32 if(nums[right]==target): 33 res[1]=right 34 elif(nums[left]==target): 35 res[1]=left 36 37 return res

    2.search in a rotated array(may have duplicated elements)

     1 class Solution:
     2     def searchInRotate(self,nums,target):
     3         if(len(nums)==0):
     4             return -1
     5 
     6         left,right=0,len(nums)-1
     7 
     8         while(left+1<right):
     9             mid=left+(right-left)//2
    10             if(nums[mid]==target):
    11                 return mid
    12 
    13             if(nums[mid]<nums[right]):
    14                 if(nums[mid]<=target<=nums[right]):
    15                     left=mid
    16                 else:
    17                     right=mid
    18             elif(nums[mid]>nums[right]):
    19                 if(nums[left]<=target<=nums[mid]):
    20                     right=mid
    21                 else:
    22                     left=mid
    23             else:
    24                 right-=1
    25 
    26         if(nums[left]==target):
    27             return left
    28         if(nums[right]==target):
    29             return right
    30         return -1
    31 
    32 nums1=[9,12,15,20,1,3,6,7]
    33 print(Solution().searchInRotate(nums1,15))
    34 print(Solution().searchInRotate(nums1,5))
    35 
    36 
    37 
    38 nums1=[9,12,15,20,1,1,1,3,6,7]
    39 print(Solution().searchInRotate(nums1,15))
    40 print(Solution().searchInRotate(nums1,1))

    3. basic op of BST

     1 #coding:utf-8
     2 
     3 class TreeNode:
     4     def __init__(self,x):
     5         self.val=x
     6         self.left=None
     7         self.right=None
     8     
     9 class Solution:
    10     def BST_insert(self,root,node):
    11         '''
    12         将node节点插入以root为根的BST中
    13         '''
    14         if(node.val<=root.val):
    15             if(root.left):
    16                 self.BST_insert(root.left,node)
    17             else:
    18                 root.left=node
    19         else:
    20             if(root.right):
    21                 self.BST_insert(root.right,node)
    22             else:
    23                 root.right=node
    24 
    25     def BST_search(self,root,val):
    26         if(root.val==val):
    27             return True
    28 
    29         if(root.val>val):
    30             if(root.left):
    31                 return self.BST_search(root.left,val)
    32             else:
    33                 return False
    34         else:
    35             if(root.right):
    36                 return self.BST_search(root.right,val)
    37             else:
    38                 return False
    39 
    40     def bfs(self,root):
    41         res=[]
    42         if(root==None):
    43             return res
    44         
    45         que=[]
    46         que.append((root,[root.val]))
    47         while(len(que)!=0):
    48             size=len(que)
    49             tmp=[]
    50             for i in range(size):
    51                 cur,path=que.pop(0)                
    52                 tmp.append(cur.val)
    53 
    54                 if(cur.left==None and cur.right==None and sum(path)==22):
    55                     print(path)
    56 
    57                 if(cur.left):
    58                     que.append((cur.left,path+[cur.left.val]))
    59                 
    60                 if(cur.right):
    61                     que.append((cur.right,path+[cur.right.val]))
    62             res.append(tmp)
    63 
    64         return res
    65 
    66 
    67 n1=TreeNode(5)
    68 n2=TreeNode(4)
    69 n3=TreeNode(2)
    70 n4=TreeNode(6)
    71 
    72 s=Solution()
    73 s.BST_insert(n1,n2)
    74 s.BST_insert(n1,n3)
    75 s.BST_insert(n1,n4)
    76 
    77 print(s.bfs(n1))
    78 
    79 
    80 print("----------------------")
    81 print(s.BST_search(n1,4))
    82 print(s.BST_search(n1,1))
  • 相关阅读:
    转 进程与线程的区别与联系
    DoEvents的应用及注意事项
    转:error LNK2001 错误
    基于UDP的简单的聊天程序
    VB提示:文件未找到:'c:\windows\sytem32\ieframe.dll\1'的解决方法
    VB PopupMenu方法
    转 vb中SetWindowsHookEx详细用法及举例
    Python批量转换txt文件为excel文件
    excel自动筛选后分别复制粘贴到新文件的解决办法
    文本编辑
  • 原文地址:https://www.cnblogs.com/zijidan/p/12503071.html
Copyright © 2011-2022 走看看