`

在排序数组中,找出给定数字的出现次数

 
阅读更多

public class CountTimesInSortedArray {

	/**
	 * 题目:在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。
	 * 解法:使用二分查找的方法分别找出给定数字的开始和结束位置,最坏情况下时间复杂度为O(logn)
	 */
	public static void main(String[] args) {

		int[] data={0,1,2,2,3,3,3,4,4,4,4,5};
		for(int target:data){
			int time=times(data,target);
			System.out.println(target+","+time+" times");
		}
		
	}
	public static int times(int[] array,int target){
		if(array==null||array.length==0){
			return -1;
		}
		return upTimes(array,target)-downTimes(array,target)+1;
	}
	public static int upTimes(int[] array,int target){
		int low=0;
		int high=array.length-1;
		while(low<high){
			int mid=(low&high)+(low^high)/2+1;//when low=high-1,let mid=high
			int value=array[mid];
			if(value<=target){
				low=mid;
			}else{
				high=mid-1;
			}
		}
		return low;
	}
	public static int downTimes(int[] array,int target){
		int low=0;
		int high=array.length-1;
		while(low<high){
			int mid=(low&high)+(low^high)/2;//when low=high-1,let mid=low
			int value=array[mid];
			if(value>=target){
				high=mid;
			}else{
				low=mid+1;
			}
		}
		return low;
	}
}

0
0
分享到:
评论

相关推荐

    两数之和:在该数组中找出和为目标值的那两个整数,并返回他们的数组下标

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例:...

    在排序数组中查找数字1

    这个问题要求我们找出一个特定的数字在给定的有序数组中出现的次数。以下是解决问题的关键知识点: 1. **二分查找(Binary Search)**: - 二分查找是一种在有序数组中查找特定元素的搜索算法。它通过不断将搜索...

    JavaScript实现找出数组中最长的连续数字序列

    关于如何用JavaScript实现找出数组中最长的连续数字序列,以下是一些重要的知识点。 首先,需要理解连续数字序列的定义:在一个整数序列中,连续数字是指按数值顺序排列,且数值相邻的数字序列。例如,序列[1, 2, 3...

    找出数组3个数字相加为0的组合

    这个题目属于计算机科学中的“三数之和”问题,通常在算法设计和面试中出现,旨在考察候选人的逻辑思维和解决复杂问题的能力。 首先,我们需要理解问题的核心——如何有效地遍历数组并找到满足条件的三元组。这里...

    Python算法题源代码-LeetCode(力扣)-在排序数组中查找元素的第一个和最后一个位置

    请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1: 输入:nums = [5,7,7,8,8,10], target =...

    在数组中快速查找近似值

    这种方法在未排序的数组中适用,但效率较低,时间复杂度为O(n)。 二分查找则适用于有序数组。它将数组分成两半,每次比较中间元素与目标值,然后根据比较结果决定在左半部分还是右半部分继续查找。如此反复,直至...

    python 实现在排序数组中查找元素的第一个和最后一个位置

    找出给定目标值在数组中的开始位置和结束位置 # 你的算法时间复杂度必须是 O(log n) 级别 # 如果数组中不存在目标值,返回 [-1, -1] # 示例 1: # 输入: nums = [5,7,7,8,8,10], target = 8 # 输出: [3,4] # 示例 2...

    1、数组中重复的数字(python)

    在给定的编程问题“1、数组中重复的数字(Python)”中,目标是找出一个整数数组中任意一个重复的数字。数组的长度为 n,并且数组内的所有元素都在 0 到 n-1 的范围内。由于题目并未要求找出所有的重复数字,只需要...

    C#验证数组元素是否重复

    然而,在处理数组时,一个常见的需求是检查数组中是否存在重复的元素,这对于数据校验、排序算法、去重操作等场景至关重要。 ### C#验证数组元素是否重复的知识点 #### 1. 数组的定义与初始化 在C#中,数组可以...

    Leetcode 在排序数组中查找元素的第一个和最后一个位置.rs

    LeetCode 问题 34 要求在一个增序的整数数组中找出给定目标值的开始和结束位置。如果数组中不存在目标值,返回 [-1, -1]。这个问题可以通过两次二分查找来解决:一次查找目标值开始的位置,另一次查找结束的位置。 ...

    如何求最大值以及所在数组里的位置

    本算法的目标是在给定的整型数组中找到最大的数值,并确定其在数组中的确切位置。通过这个简单的示例,我们可以进一步理解和应用类似的算法思路来解决更复杂的问题,比如查找数组中的最小值等。 #### 代码分析 ...

    java选择排序 数组选择排序

    这种排序方式就像我们在日常生活中挑选东西一样,先找出最好的或者最差的,然后放到合适的位置,然后再找下一个,以此类推。 在Java中实现选择排序,通常会用到一个名为`SelectionSort`的类,里面包含一个公共方法`...

    查找序列(数组)中的最大值,最小值(例子)

    这个例子展示了如何在Java中用简单的循环和条件判断来找出数组中的最大值。同样的思路可以用于寻找最小值,只需稍作修改:在初始时设置最小值为数组中的第一个元素,然后在循环中判断当前元素是否小于已知的最小值,...

    取数组中的第2大值

    "取数组中的第2大值"是一个非常明确的标题,它告诉我们需要从给定的数组中找出第二大的元素的下标和值。这个问题非常常见,在实际编程中经常会遇到这种情况。 描述解释 "c语言实现取数组中的第2大值"是标题的详细...

    python 两个排序数组的中位数

    # 请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) # 你可以假设 nums1 和 nums2 不同时为空 # 示例 1: # nums1 = [1, 3] # nums2 = [2] # 中位数是 2.0 # 示例 2: # nums1 = [1, 2] # nums2 ...

    求一个含有8个整数的数组中前3个最大值对应的下标

    在这个问题中,我们不需要完全排序,只需要找出前3个最大值的下标,因此可以稍微修改选择排序的逻辑,每一轮找到最大值后,记录下其下标,并将其替换为0,重复此过程3次。 代码示例(Python): ```python def ...

    数组求和,素数,排序算法

    - 在`max()`函数中,通过比较数组中的每个元素与当前最大值`max`,找出数组的最大值。 - `paixu()`函数实现了冒泡排序,对数组进行升序排列。 - `sushu()`函数用于检测数组中的素数,即不能被2到自身的一半之间...

    从n个数组中取出所有排列组合(Java实现)

    这个问题的主要目标是从给定的n个数组中找出所有的可能排列组合。Java作为一种强大的编程语言,提供了丰富的工具和方法来解决此类问题。下面我们将深入探讨这个问题的解决方案、相关算法以及Java中的实现细节。 ...

    js实现数组冒泡排序、快速排序原理

    在JavaScript中,数组排序是常见的数据处理操作,主要分为两种基本算法:冒泡排序和快速排序。这两种排序方法各有特点,适用于不同的场景。 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,它重复地遍历待排序...

Global site tag (gtag.js) - Google Analytics