1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.ArrayList;
//升序排列的整形数组A,元素两两不相等。请设计高效的算法找出A[i]=i的数据。
//使用二种方法
public class BinarySearch {
     
    public static void main(String[] args) {
        int[] nums={-1,1,2,3};
        ArrayList<Integer> res=find(nums);
        for(int e:res){
                System.out.println(e+" ");
        }
         
        ArrayList<Integer> res2=binarysearch(nums);
        for(int e:res2){
                System.out.println(e+" ");
        }
    }
     
    //方法一
    public static ArrayList<Integer> find(int[] nums){
        int n=nums.length;
        ArrayList<Integer> all=new ArrayList<Integer>();
        for(int i=0;i<n;i++){
            if(nums[i]==i){
                all.add(nums[i]);
            }else if(nums[i]>i){
                break;
            }
        }
        return all;
    }
     
    //方法二
    public static ArrayList<Integer> binarysearch(int[] nums){
        ArrayList<Integer> all=new ArrayList<Integer>();
        int n=nums.length;
        if(n==0 || nums[0]>0 || nums[n-1]<n-1){
            return all;
        }
        //至少有一个元素的值等于其下标
        int pivot=binaryFind(nums,0,n-1);
        all.add(pivot);
        //向左查找所有目标元素
        for(int i=pivot-1;i>=0 && i==nums[i];--i){
            all.add(i);
        }
        //向右查找所有的目标元素
        for(int i=pivot+1;i<n && i==nums[i];i++){
            all.add(i);
        }
        return all;
    }
     
    public static int binaryFind(int[] nums,int i,int j){ //二分搜索方法
        int mid=(i+j)/2;
        if(nums[mid]==mid){
            return mid;
        }else if(nums[mid]>mid){
            return binaryFind(nums,i,mid-1);
        }else{
            return binaryFind(nums,mid+1,j);
        }
    }
}

    本文转自爱情89757 51CTO博客,原文链接:http://blog.51cto.com/59465168/1965755,如需转载请自行联系原作者

Java实现升序排列的整形数组A,元素两两不相等找出A[i]=i的数据相关推荐

  1. 在一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。---(java版)

    注:这里需要自己输入要查询的数值,而且如果输入的数值查询到数组里面没有会输出[-1.-1]. 代码部分: public static void main(String[] args) {int [] ...

  2. 已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。

    已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者. 答案: int max(int a,int b) { return (a+b+abs(a-b))/2; } ...

  3. Leetcode04--给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。

    文章目录 题目 一.归并算法 二.二分查找法 题目 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数. 进阶:你能设计一个时间复杂度 ...

  4. 698. 划分为k个相等的子集:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

    题目描述 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k ...

  5. C语言 输入一个5行5列的数组。1.求数组主对角线上元素的和。2.求出辅对角线上元素的积。3.找出主对角线上最大的值及其位置

    C语言 输入一个5行5列的数组.1.求数组主对角线上元素的和.2.求出辅对角线上元素的积.3.找出主对角线上最大的值及其位置 主对角线是什么: 在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一 ...

  6. php升序排列,php关联数组怎么按键名实现升序排列

    PHP数组按键名实现升序排列,是PHP初学者需掌握的基础知识点.那么对于PHP关联数组按键名进行升序排列,我们就可以使用ksort()函数来实现. 下面我们就结合简单的代码示例,给大家介绍不同键名类型 ...

  7. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

  8. 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    /**  * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素.  * 能够假定数组元素原先是按从小到大的顺序排列的.  */ /*** 思路:数组被 ...

  9. 给定数组Arr[n],O(n)时间内找出每个元素左侧所有元素中位置最靠近该元素且大于该元素的元素

    http://blog.csdn.net/yysdsyl/article/details/5419149#cpp 题目: 给定数组Arr[n],对于其中的每个元素Arr[i](0=<i<n ...

最新文章

  1. 听完李厂长和雷布斯在乌镇讲AI段子,我突然理解为什么这两个男人选择在一起了
  2. Java8——三种多线程方式
  3. 告别人工标注!仅靠合成数据就能实现真实人脸分析!
  4. html img 指定旋转角度_ALLEN老师自动化测试小课堂 | 生成HTML可视化报告的两个常见模块...
  5. C语言建立有向图的邻接表及其遍历操作
  6. 多网卡指定网卡发送数据
  7. 当CV遇上联邦学习,一起聊聊视觉联邦技术
  8. cgic: 为C语言编写CGI的C函数库
  9. TensorLayer MNIST
  10. Xshell 的基本使用
  11. 岁末年初3Q大战惊现高潮,360震撼推出Android 3Q IM即时通讯
  12. HADOOP综合应用架构之一 配置Secondarynamenode在另一台机器运行
  13. 计算机二级考试办公室高级应用考点,全国计算机二级考试MSOFFICE高级应用考点解析Word1...
  14. 电脑有独显内存还被占用_什么是电脑显卡,显卡是按什么来分类的
  15. PyTorch深度学习(B站刘二大爷)第八讲作业——Kaggle网站泰坦尼克号Titanic
  16. 中国互联网老总的经典妙语语录
  17. HTML显示证件页面图形,证件信息.html
  18. 力扣(202.454)补9.18
  19. ssm+java农村快递代取平台52wxh(程序+lw+源码+远程部署)
  20. 数据采集框架 kafka

热门文章

  1. 创业公司引导页html5模板
  2. 2020恩智浦智能车大赛规则_2020年世界人工智能围棋大赛落幕,各路围棋AI共同论道...
  3. 帝国CMS7.5仿hao123漫画网站模板动态版
  4. Visual Studio 2008 SP1 和 net framework 3.5 新特性
  5. 常用浏览器修改User-Agent的方法
  6. 视差滚动的爱情故事之优化篇
  7. 给开发者准备的 10 款最好的 jQuery 日历插件
  8. 视差滚动教程、实现方法、源代码
  9. C++——面向对象设计原则
  10. Linux——userdel删除用户不完全问题