1.有序数组,判断一个数是否存在于数组中,时间复杂度O(logn)

解题思路:

二分法,在有序数组中,提高时间复杂度的一个方法。

代码:

def demo(nums, target):left,right=0,len(nums)-1while left <= right:mid = (left + right)/2if target < nums[mid]:right = mid - 1elif target > nums[mid]:left = mid + 1else:return Truereturn False 

2.有序数组,从一个元素中翻转,判断一个数是否存在于数组中,时间复杂度O(logn)

例子:

[1, 2, 3, 4, 6, 7, 8, 10,11]  ,从4这个元素,左右翻转,[6, 7, 8, 10,11,1, 2, 3, 4]

依然使用二分法,难点在于如何判断 target 在前半段还是后半段。对于无重复的数组[6, 7, 8, 10,1, 2, 3, 4],如果满足 A[begin] <= A[mid] ,即数组的第一个值小于中间值 6 < 11 ,那么可以断定前半段数组有序。如果不满足这个条件, 则说明后半段有序。因为把这个数组从中间分开后,一定至少有半个数组是有序的。然后再判断 target 是否在有序的半段中(这个很好判断),如果在,则相当于在有序数组中查找,很简单。如果不在有序的那半段,则一定在另外半段里。然后使用迭代即可把target找出。

def demo(nums, target):left,right=0,len(nums)-1while left <= right:mid = (left + right)/2# 判断mid是否为target,如果是,直接返回,如果不是,再判断target是在前半段还是后半段if nums[mid] == target:return mid# 如果前半段有序if nums[left] <= nums[mid]:# 判断target是否在前半段,如果在,则继续遍历前半段,如果不在,则继续遍历后半段if nums[left] <= target and target < nums[mid]:right = mid -1else:left = mid + 1# 后半段有序else:# 判断target是否在后半段,如果在,则继续遍历后半段,如果不在后半段,则继续遍历前半段if nums[mid] < target and target <= nums[right]:left = mid + 1else:right = mid - 1return -1

3.一个递增数组中,target出现的次数

力扣

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

解题思路:

排序数组中的搜索问题,首先想到 二分法 解决。

排序数组 nums 中的所有数字 targettarget 形成一个窗口,记窗口的 左 / 右边界 索引分别为 left 和 right ,分别对应窗口左边 / 右边的首个元素。

本题要求统计数字 target 的出现次数,可转化为:使用二分法分别找到 左边界left 和 右边界 right ,易得数字target 的数量为right−left−1 。

class Solution:def search(self, nums: [int], target: int) -> int:# 搜索右边界 righti, j = 0, len(nums) - 1while i <= j:m = (i + j) // 2if nums[m] <= target: i = m + 1else: j = m - 1right = i# 若数组中无 target ,则提前返回if j >= 0 and nums[j] != target: return 0# 搜索左边界 lefti = 0while i <= j:m = (i + j) // 2if nums[m] < target: i = m + 1else: j = m - 1left = jreturn right - left - 1

【LeetCode】陌陌面试-有序数组于其一个元素翻转后,判断一个数是否存在数组中,时间复杂度O(logn)相关推荐

  1. c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。

    将一个二维数组行和列的元素互换,存到另一个二维数组中. 解:程序: #include<stdio.h> int main() { int i, j, a[2][3] = { {1,2,3} ...

  2. 实验4.1对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 。 要求: 1)数组有10个元素; 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息; 3)输出时,首先输出数组

    /*SY4.1 题目描述 对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 . 要求: 1)数组有10个元素: 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息: 3)输出 ...

  3. 2021.04.06JAVA定义一个数组,随便输入一个数字,判断这个数在数组中是否存在,存在返回数组的下标,否则返回-1

    定义一个数组,随便输入一个数字,判断这个数在数组中是否存在,存在返回数组的下标,否则返回-1 public class TestD {public static void main(String[] ...

  4. js 数组移除指定元素【函数封装】(含对象数组移除指定元素)

    普通数组移除指定元素 // 普通数组移除指定元素 function removeItem(arr, item) {let targetIndex = arr.findIndex((itemTemp) ...

  5. vue 判断一个数是否在数组中_高级前端进阶,vue如何实现$nextTick

    前言: 本文需要一定的事件循环相关知识,想了解事件循环的小伙伴可以看 这里. 本文要弄明白下面两件事: $nextTick什么时候执行 vue中nextTick与$nextTick区别 1.查看源码中 ...

  6. php 数组 添加元素、删除元素

    PHP数组添加一个元素的方式: push(), arr[], Php代码 $arr = array(); array_push($arr, el1, el2 ... eln); 但其实有一种更直接方便 ...

  7. 【实习面经】一口气面完了字节、陌陌、云从,我发现面试官原来是这样问问题的?

    看面经是非常有必要的,特别是面试前,面哪个公司就搜哪个公司的面经看!看面试官问什么?怎么问?每个公司的面试侧重点是不一样的.通过面经去查缺补漏.侧重复习是可以事半功倍的!当然不是建议大家面经式的学习, ...

  8. 一起刷 leetcode 之旋转矩阵(头条/华为/陌陌真题)

    微信公众号:[每天晒白牙] 关注可了解更多的编程知识.问题或建议,请公众号留言; 如果你觉文章对你有帮助,欢迎关注与 题目描述 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节. ...

  9. 2020最新大厂(阿里头条百度快手美团滴滴猿辅导陌陌)Java开发岗位社招面试干货分享总结

    (尊重劳动成果,转载请注明出处:https://yangwenqiang.blog.csdn.net/article/details/106033403 冷血之心的博客) 前言: 按照惯例,我先来个自 ...

最新文章

  1. 下面中???该如何填写,才可以正确执行强制类型转换? int (*monthp)[31]; monthp = (???)malloc(31);
  2. try catch对异常进行输出到日志、_java安全编码指南之:异常处理
  3. linux系统中各个文件描述——陆续添加
  4. K8S Learning(8)—— Service
  5. spring webflow : 上传单个文件实例
  6. 【计算机网络复习 数据链路层】3.3.1 差错控制(检错编码)
  7. 三大特性学习目标 java 1614782356
  8. (三)Appium-desktop 打包
  9. php 微商城 开源,微商城开通为什么选php开源网店系统
  10. JAVA 程序员需要用到 10 个测试框架和库
  11. android下watchprosp和svc命令
  12. 群之脉PHP面试,面试问Redis集群,被虐的不行了......
  13. Can Place Flowers
  14. 中国大陆芯片设计企业名单
  15. 案例分析 | 贝壳找房:自我颠覆的整合式创新引领产业数字化
  16. Python练手项目:计算机自动还原魔方(2)还原顶部
  17. 什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?
  18. ubuntu 磁盘管理工具 ---- GParted 图形化分区工具
  19. C++软件工程师面试考点.md
  20. php 百度权重查询系统,查百度—百度网站权重SEO工具查询_PHP教程

热门文章

  1. html设置行高像素,css怎么设置行高?
  2. RC4加密算法原理与C#实现
  3. Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同
  4. [JavaScript案例]360度全景照片
  5. NC推拉单或超链接打开单据的编辑页面
  6. 卤水制备高纯碳酸锂除硼
  7. 【展锐】双摄帧同步踩坑
  8. 600以内的蓝牙耳机哪款好?盘点600元蓝牙耳机性价比之王
  9. 大数据给教育行业带来的影响,主要体现在哪几方面?
  10. SQL-计算留存率cohort