首頁  >  文章  >  後端開發  >  在C++中,尋找未排序數組中元素的起始索引和結束索引

在C++中,尋找未排序數組中元素的起始索引和結束索引

WBOY
WBOY轉載
2023-08-29 10:17:06996瀏覽

在C++中,尋找未排序數組中元素的起始索引和結束索引

在這個問題中,我們得到一個包含 n 個未排序整數值的陣列 aar[] 和一個整數 val。我們的任務是在未排序的陣列中尋找元素的開始和結束索引

對於數組中元素的出現,我們將返回,

“起始索引和結束索引”(如果在數組中找到兩次或多次)。

「單一索引」(如果找到)

如果陣列中不存在,則「元素不存在」

讓我們舉個例子來理解問題,

範例1

#
Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 2
Output : starting index = 0, ending index = 5

解釋

元素2 出現兩次,

第一次出現在索引= 0 處,

第二次出現在索引處= 5

範例2

Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 5
Output : Present only once at index 2

解釋

元素5 在索引= 2 處僅出現一次,

範例3

Input : arr[] = {2, 1, 5, 4, 6, 2, 3}, val = 7
Output : Not present in the array!

解決方法

解決該問題的一個簡單方法是遍歷數組。

我們將遍歷陣列並保留兩個索引值:first 和last。第一個索引將從頭開始遍歷數組,最後一個索引將從數組尾開始遍歷。當第一個和最後一個索引處的元素值相同時結束循環。

演算法

  • 步驟1 - 迴圈遍歷陣列

    • 步驟1.1 - 使用第一個索引從開始遍歷,使用最後一個索引進行遍歷從末尾開始。

    • 步驟 1.2 - 如果任何索引處的值等於 val。不要增加索引值。

    • 步驟 1.3 - 如果兩個索引的值相同,則傳回。

範例

說明我們解決方案工作原理的程式

#include <iostream>
using namespace std;

void findStartAndEndIndex(int arr[], int n, int val) {
   int start = 0;
   int end = n -1 ;
   while(1){
   if(arr[start] != val)
      start++;
   if(arr[end] != val)
      end--;
   if(arr[start] == arr[end] && arr[start] == val)
      break;
   if(start == end)
      break;
}
   if (start == end ){
      if(arr[start] == val)
         cout<<"Element is present only once at index : "<<start;
      else
         cout<<"Element Not Present in the array";
   } else {
      cout<<"Element present twice at \n";
      cout<<"Start index: "<<start<<endl;
      cout<<"Last index: "<<end;
   }
}
int main() {
   int arr[] = { 2, 1, 5, 4, 6, 2, 9, 0, 2, 3, 5 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int val = 2;
   findStartAndEndIndex(arr, n, val);
   return 0;
}

輸出

Element present twice at
Start index: 0
Last index: 8

以上是在C++中,尋找未排序數組中元素的起始索引和結束索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除