劍指14 有序陣列中某元素出現的個數

2021-10-23 15:33:03 字數 1172 閱讀 8071

題目描述:

統計乙個數字在排序陣列**現的次數。

樣例:

輸入:nums[5,7,7,8,8,10],target = 8

輸出:2

輸入:nums[5,7,7,8,8,10],target = 6

輸出:0

題解

因為陣列是排序的,所以target元素位置一定是連續的。

一:雙指標,慢指標找到第乙個target元素,就停在此處,快指標繼續向前走,直到不是target的元素出現。兩指標的差值就是target元素的個數。

**

public static int search(int nums, int target) 

if(head >= nums.length)

return 0;

int foot = head;

while(nums[foot] == target)

return foot - head - 1;

}

二:雙指標沒有利用陣列已排序的條件快速查詢到target元素,可以使用二分法定位到target元素的區域,再採用雙指標計算出元素的個數

**

public static int search(int nums, int target) 

if(nums[mid] > target)

if(nums[mid] == target)

while(back < nums.length && nums[back] == target)

count = back-font-1;

break;

}} return count;

}

三:(精選)二分法直接找到元素的頭尾,封裝在乙個方法裡,用該方法找到元素尾,再找到比target元素小一的元素尾,二者之差就是target元素的個數。

**:

public int search(int nums, int target) 

int helper(int nums, int tar)

return i;

}

劍指Offer之有序陣列查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 如題所示,它的行和列都是遞增的。那麼我們需要試圖找到邊界點,...

23 刪除有序陣列中的元素,陣列仍然有序 陣列

刪除乙個有序陣列的乙個元素,採用兩個陣列實現 實現 2017年6月19日16 16 31 功能 刪除陣列中乙個資料之後陣列依然有序 include stdio.h define m 9 int main int b m 1 int i,j,num bool flag printf 請輸入將要刪除的資...

有序陣列中數字出現次數

題目 統計有序陣列中排序某乙個數出現的次數 比如 中,2出現了3次,3出現了0次 思路 利用二分查詢,找到某乙個數在陣列中出現的第乙個下標firstindex和最後乙個下標lastindex 出現次數就是 lastindex firstindex 1 include using namespace ...