迴圈遞增陣列中查詢是否存在某個數
#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
楊氏矩陣 //有一個二維陣列. //陣列的每行從左到右是遞增的,每列從上到下是遞增的. //在這樣的陣列中查詢一個數字是否存在。 //時間複雜度小於O(N);
//陣列: //1 2 3 //2 3 4 //3 4 5 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdlib.h> #include <stdio.h> int search(int a
在相鄰元素相差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;