一个有序数组,判断是否含有一个元素

解析:
给定一个数组

如果需要判断是否存在的元素为3。
首先找到数组的中间元素;

如果此元素为3,结束;
如果不是,此元素与3比较,此元素如果大于3,在从此元素左边的部分数组寻找中间元素,以此类推。

如果查找到最后都不是3,证明3在数组中不存在。

代码:
public static boolean isExistInArray(int[] sortedArr, int num) {
if (sortedArr == null || sortedArr.length == 0) {
return false;
}

 int L = 0;int R = sortedArr.length - 1;int mid = 0;// L..Rwhile (L < R) { // L..R 至少两个数的时候mid = L + ((R - L) >> 1);if (sortedArr[mid] == num) {return true;} else if (sortedArr[mid] > num) {R = mid - 1;} else {L = mid + 1;}}return sortedArr[L] == num;
}

一个有序数组,查找一个元素的最左位置

解析:
给定一个数组

如果需要判断是否存在的元素为3。
首先找到数组的中间元素;
如果此元素为3,记录临时索引,在从此元素左边的部分数组寻找中间元素;
如果不是,此元素与3比较,此元素如果大于3,在从此元素左边的部分数组寻找中间元素,以此类推。

查找到最后,临时索引就是元素的最左位置。

代码:

public static int nearestIndex(int[] arr, int value) {int L = 0;int R = arr.length - 1;int index = -1; // 记录最左的对号while (L <= R) { // 至少一个数的时候int mid = L + ((R - L) >> 1);if (arr[mid] >= value) {index = mid;R = mid - 1;} else {L = mid + 1;}}return index;
}

一个无序且相邻元素不相等的数组,查找一个局部最小元素

解析:
给定一个数组
第一个元素小于第二个元素,说明第一个元素为局部最小,倒数第一个元素小于倒数第二个元素,说明倒数第一个元素为局部最小。
因为第一个元素和第二个元素不相等,倒数第一个元素和倒数第二个元素不相等,此数组元素的值一定存在一个变化曲线

首先找到数组的中间元素;
如果此元素左面的值大于此元素,此元素右的值大于此元素,说明找到了;
如果此元素左面的值小于此元素,在左面的部分数组中找中间元素,再次判断;
如果此元素右面的值小于此元素,在右面的部分数组中找中间元素,再次判断。
以此类推,即可找到。

代码:

public static int getLessIndex(int[] arr) {if (arr == null || arr.length == 0) {return -1; // no exist}if (arr.length == 1 || arr[0] < arr[1]) {return 0;}if (arr[arr.length - 1] < arr[arr.length - 2]) {return arr.length - 1;}int left = 1;int right = arr.length - 2;int mid = 0;while (left < right) {mid = (left + right) / 2;if (arr[mid] > arr[mid - 1]) {right = mid - 1;} else if (arr[mid] > arr[mid + 1]) {left = mid + 1;} else {return mid;}}return left;
}

有苦有乐的算法 --- 有序数组中的元素存在问题、最左元素问题和无序数组局部最小问题相关推荐

  1. 算法题:找出一个数组中相加值最大的连续序列元素

    package arithmetic;/*** @author SHI* 求一个数组中相加值最大的连续序列元素*/ public class MaxSequence {public static vo ...

  2. 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)

    输入一个整型数组,数组里有正数也有负数.数组中的一个或连续多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).(奇安信-wab前端) 例如,输入的数组为{ 1.-2.3.10. ...

  3. 创建一个二维数组,以4行4列左对齐的方式将数组输出

    创建一个二维数组,以4行4列左对齐的方式将数组输出 package p1;public class Java_2{public static void main(String[] args){//** ...

  4. 把一个内含7个元素的数组中的第3~第5个元素拷贝到内含3个元素的数组中

    程序代码为本人亲自编写,并非标准答案,仅供参考. 如果程序有任何bug或者有好的建议,欢迎在评论区留言,或者私信. 前面写过拷贝数组的函数,在这里使用该函数即可,实际参数使用数组元素的地址,改变处理数 ...

  5. 给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    多数元素 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3 ...

  6. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。

    署名:csdn等网站博客copy产出,AI时代知识新搬运工 言归正传:写下这道题的个人理解 题干: 给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的 ...

  7. php数组删除值为空的元素,PHP实现移除数组中为空或为某值元素的方法

    本文实例讲述了PHP实现移除数组中为空或为某值元素的方法.分享给大家供大家参考,具体如下: 在实现移除数组中项目为空的元素或为某值的元素时用到了两个函数 array_filter.create_fun ...

  8. 【宫水三叶的刷题日记】961. 在长度 2N 的数组中找出重复 N 次的元素

    题目描述 这是 LeetCode 上的 961. 在长度 2N 的数组中找出重复 N 次的元素 ,难度为 简单. Tag : 「模拟」.「计数」.「构造」.「哈希表」 给你一个整数数组 nums ,该 ...

  9. 有苦有乐的算法 --- 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两种数

    题目 一个数组中,有两种数出现了奇数次,其余数都出现了偶数次,找到这两组数 例: [2,4,3,2,5,4] ⇒ [3,5] [1,4,6,3,7,8,3,2,1,2,6,6,7,8] ⇒ [6,4] ...

最新文章

  1. 《JAVA与模式》之责任链模式
  2. HTML设计显示表单
  3. 页面排序(上下元素对换)
  4. PostgreSQL pg中的截取补齐lpad函数怎么用?
  5. 【NOIP2018】游记
  6. tp3.2 执行原生sql
  7. webbrowser只对浏览器外应用程序以及在_常用浏览器大盘点!
  8. C#实现人民币阿拉伯数字转换成大写金额的代码
  9. chmod 755 究竟是什么鬼?
  10. 《植物大战僵尸》网页版!火热试玩当中
  11. word打开wps文件乱码_Word文档打开是乱码怎么解决
  12. 右键菜单,用VSCode打开文件和文件夹
  13. 距离度量准则(转载)
  14. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.5  商品摆放:营造氛围的搭配...
  15. SeasonJoe学长的考研日记
  16. 关于寻迹小车组装建议
  17. 百度收录链接如何查询
  18. java里remark是什么意思_remark是什么意思中文翻译
  19. mv强制覆盖 shell_shell mv命令
  20. GigE相机的IP设置

热门文章

  1. 备考通信复试过程中的一些知识点总结梳理——信道编码
  2. avc水平什么意思_西方经济学中AVC是什么意识?
  3. 南方测绘CASS10.1.5属性面板名称对照表(ArcGIS数据文件SHP转入到CASS绘图环境)
  4. 积极响应号召_30多个“号召性用语”按钮模板下载
  5. 【LuKS】Vba开发从入门到精通 =.=
  6. 硬盘空间免费扩容2T!!!
  7. Python/练习题
  8. 脑机接口专栏 | 利用黎曼几何分析EEG脑电信号(一)
  9. 安装hmc会依赖bios时间吗_VMWARE安装HMC
  10. python 汇总excel表_【Python】Word表格汇总Excel