1. 程式人生 > >迴圈遞增陣列中查詢是否存在某個數

迴圈遞增陣列中查詢是否存在某個數

#include <cassert>
#include <iostream>
using namespace std;
// 在迴圈遞增陣列中檢視是否存在某個數
// 返回-1表示陣列中沒有該元素
int search(int arr[], int len, int value)
{
	if(arr == NULL || len <= 0)
	{
		return -1;
	}
	int start = 0;
	int end = len - 1;
	while(start <= end)
	{
		int mid = start + (end - start >> 1);
		if(value == arr[mid])
		{
			return mid;
		}
		else if(value < arr[mid]) // 值小於中間元素
		{
			if(arr[mid] >= arr[start]) // 中間元素在左陣列
			{
				if(value < arr[start]) // 在右陣列查詢
				{
					start = mid + 1;
				}
				else // 在左陣列查詢
				{
					end = mid - 1;
				}
			}
			else // 中間元素在右陣列
			{
				end = mid - 1;
			}
		}
		else // 值大於中間元素
		{
			if(arr[mid] >= arr[start]) // 中間元素在左陣列
			{
				start = mid + 1;
			}
			else // 中間元素在右陣列
			{
				if(value < arr[start]) // 在右陣列查詢
				{
					start = mid + 1;
				}
				else // 在左陣列查詢
				{
					end = mid - 1;
				}
			}
		}
	}
	return -1;
}
int main(int argc, char* argv[])
{
	int arr1[] = {17, 19, 20, 25, 1, 4, 7, 9};
	int len = sizeof(arr1) / sizeof(int);
	for(int i = 0; i < len; ++i)
	{
		cout << search(arr1, len, arr1[i]) << endl;
	}
	cout << search(NULL, 1, 0) << endl;
	cout << search(arr1, 0, 7) << endl;
	cout << search(arr1, len, 10) << endl;
	cout << search(arr1, len, 0) << endl;
	cout << search(arr1, len, 26) << endl;
	
	return 0;
}

執行結果:

0
1
2
3
4
5
6
7
-1
-1
-1
-1
-1

相關推薦

迴圈遞增陣列查詢是否存在個數

#include <cassert> #include <iostream> using namespace std; // 在迴圈遞增陣列中檢視是否存在某個數 // 返回-1表示陣列中沒有該元素 int search(int arr[], int

在按順序遞增陣列查詢缺少的一個數字

題目是這樣的: 給出一個數組arr內容是0-99的數字,從中間隨機取出一個數字x,剩下的數字在陣列arr中遞增排序,求:使用最優的方法從陣列arr中找到隨機取出的x是多少 下面寫的是js語法形式 方法一: 這是最笨也是最普通的方法,時間複雜度為O(n),for迴圈整個

在有序遞增陣列查詢一個缺少的數字

例如2,3,4,5,6,8,9.在這個陣列中我們要找到缺少的7。從直覺上看,我們可以把2到9求和,然後把陣列的成員求和。用數字的和減去陣列的和得到的就是缺少的數字。但是這個辦法的時間複雜度是O(n)。但是我們看到陣列是有序的,能不能通過二分法找到數字呢,答案是肯定的。我們可

//楊氏矩陣 有一個二維陣列. 陣列的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的陣列查詢一個數字是否存在。

//楊氏矩陣 有一個二維陣列. 陣列的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的陣列中查詢一個數字是否存在。 時間複雜度小於O(N); 我用一個while迴圈實現了該要求 #include <stdio.h> #include <windows.h>

//楊氏矩陣 有一個二維陣列. 陣列的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的陣列查詢一個數字是否存在

題目: //楊氏矩陣  有一個二維陣列.  陣列的每行從左到右是遞增的,每列從上到下是遞增的.  在這樣的陣列中查詢一個數字是否存在。  時間複雜度小於O(N);  陣列:  1 2 3  2 3 4

在相鄰元素相差1的陣列查詢一特定元素第一次出現的位置(非遍歷)

package algorithm.line; /**  * 思路: 我  * 們要充分利用“相鄰元素之間的差值為1”這個條件。假設我們要查詢“7”這個元素,將table[0]與”7″比較,由於table[0]的值為2,不相  * 等。此時我們要比較的下一個元素是table

lintcode尋找旋轉排序陣列的最小值/迴圈有序陣列查詢

問題描述 迴圈有序陣列 假設一個旋轉排序的陣列其起始位置是未知的(比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 你可以假設陣列中不存在重複的元素。 筆記 還是要用二分查詢。再加一點細節處理。

c++在陣列查詢元素並返回位置下標,統計元素出現次數程式

IDE是VS2013. 在陣列中查詢元素並返回位置下標,若找到元素則返回下標(多個相同元素,返回最後一個),沒找到返回-1; 統計某元素出現次數程式,沒出現返回0; #include "stdafx.h" #include<iostream> using nam

輸一個遞增排序的陣列和一個數字 s,在陣列查詢個數使得它們的 和正好是 s

面試題:和為 s 的兩個數字 VS 和為 s 的連續正數序列 題目一:輸一個遞增排序的陣列和一個數字 s,在陣列中查詢兩個數使得它們的 和正好是 s。如果有多對數字的和等於 s,輸出任意一對即可。例如:輸入陣列 {1,2,4,7,11,15}和數字為 15.輸出 4 和 1

[Swift]LeetCode34. 在排序陣列查詢元素的第一個和最後一個位置 | Find First and Last Position of Element in Sorted Array

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value. Your algorit

Problem C: 零起點學演算法82——陣列查詢

#include <stdio.h> int main( int argc, char *argv[]) {      int n,b,i,m,flag=0,a[20];   &nbs

在一個有序陣列查詢具體的某個數字n

思路: 1.給定一個有序陣列(陣列元素排列有序,升序或者降序) 2.給定一個數字,查詢這個數字是否在陣列中,若存在則返回這個數字的下標 #include <stdio.h> #include <stdlib.h> int main() { int arr[] = {

零起點學演算法82——陣列查詢

Description 在給定的陣列中查詢一個數 Input 多組測試,每組第一行輸入1個整數n(n<20),然後是n個整數 第二行輸入1個整數m Output 查詢在第一行的n個整數中第一次出現數字m的下標位置並輸出,如果沒有找到則輸出No Sample Input 3 4 5 6

leetcode題庫——在排序陣列查詢元素的第一個和最後一個位置

題目描述: 給定一個按照升序排列的整數陣列 nums,和一個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。 你的演算法時間複雜度必須是 O(log n) 級別。 如果陣列中不存在目標值,返回 [-1, -1]。 示例 1: 輸入: nu

一道能做出來就腳踢BAT的高難度演算法題:在元素重複三次的陣列查詢重複一次的元素

我們看一道難度很高的查詢類演算法題,如果你真能在一小時內給出正確的演算法和編碼,那麼你隨便在BAT開口年薪一百萬都不算過分。我們先看題目:給定一個數組,它裡面除了一個元素外,其他元素都重複了三次,要求在空間複雜度為O(1),時間複雜度為O(n)的約束下,查詢到只重複了一次的元素。 在

leetcode 34在排序陣列查詢元素的第一個和最後一個位置 python

給定一個按照升序排列的整數陣列 nums,和一個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。 你的演算法時間複雜度必須是 O(log n) 級別。 如果陣列中不存在目標值,返回 [-1, -1]。 示例 1: 輸入: nums = [5,7,7,8,8,

在整型有序的陣列查詢一個數字的下標

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[] = { 1,2,3,4,5,6,7,8,9,10 }; int to_find = 6;

寫程式碼可以在整型有序陣列查詢想要的數字

使用二分法查詢會大大提高效率,不需用遍歷陣列中每一個元素的值 首先解釋二分法 假設要找的數字是5,從12個數中尋找,會先找12的一半6,判斷是大了,於是知道了要找的數字在左邊0——6之間,再取半得到3,是小了,於是在3—6之間再折半為4(為什麼是4,是因為三到六最中的數是4.5,

在整形有序的陣列查詢想要的數字,找到了返回數字下標,沒找到返回-1,折半查詢

#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char arr[] = { 1, 2, 3, 4, 5, 8, 9, 10 ,20}; int to_find = 5;