【谷歌面試題】求陣列中兩個元素的最小距離
一個數組,含有重複元素,給出兩個數num1和num2,求這兩個數字在陣列中出現的位置的最小距離
O(n)時間複雜度,O(1)空間複雜度
int minDistance(int A[], int size, int num1, int num2) { int num1_last_pos = -1; int num2_last_pos = -1; int min_dist = INT_MAX; for(int i = 0; i < size; ++i) { if(A[i] == num1) { num1_last_pos = i; if(num2_last_pos >= 0) min_dist = min(min_dist, num1_last_pos-num2_last_pos); } if(A[i] == num2) { num2_last_pos = i; if(num1_last_pos >= 0) min_dist = min(min_dist, num2_last_pos-num1_last_pos); } } return min_dist; }
相關推薦
【谷歌面試題】求陣列中兩個元素的最小距離
一個數組,含有重複元素,給出兩個數num1和num2,求這兩個數字在陣列中出現的位置的最小距離 O(n)時間複雜度,O(1)空間複雜度 int minDistance(int A[], int size, int num1, int num2) { int num1_la
動態規劃系列---求陣列中兩個元素差的最大值
題目 求陣列中兩個元素差的最大值(後面的元素減去前面的元素);對應實際生活中的股票買賣,找出可能的最大收益; 思路 類似於求陣列連續和的最大值; 儲存最大差值和最小值,遍歷陣列,如果當前元素-min>最大差值,則更新最大差值;如果當前元素<
【劍指Offer學習】【面試題50:樹中兩個結點的最低公共祖先】
題目:求樹中兩個結點的最低公共祖先,此樹不是二叉樹,並且沒有指向父節點的指標。 樹的結點定義 private static class TreeNode { int val; List<TreeNode> childre
谷歌面試題:1024! 末尾有多少個0?
解答思路: 末尾0的個數取決於乘法中因子2和5的個數。顯然乘法中因子2的個數大於5的個數,所以我們只需統計因子5的個數。 是5的倍數的數有: 1024 / 5 = 204個 是25的倍數的數有:1024 / 25 = 40個 是125的倍數的數有:1024 / 125 = 8個 是625的倍數的
(動態規劃DP)面試題:求陣列中兩個數的最大差值(只能下標大的減去下標小的)符合無後效性
空間複雜度優化演算法 void sovle_maxSub_Dp_OptimalSpace(int *a, int n){ int S=0; int max_value=INT_MIN; int max_index=0; for(int i=n-2;i>=1;
[面試題]設計一個演算法找到陣列中兩個元素相加等於指定數的所有組合
思路1:可以用hash表來儲存陣列中的元素,這樣我們取得一個數後,去判斷sum - val 在不在陣列中,如果在陣列中,則找到了一對二元組,它們的和為sum,該演算法的缺點就是需要用到一個hash表,增加了空間複雜度。 思路2:同樣是基於查詢,我們可以先將陣列排序,然後依次取一個數後,在陣列中用二分查詢,查
劍指Offer(第二版)面試題3:陣列中的重複元素
從今天開始,學習劍指Offer(第二版)中的所有演算法題,並且用java實現一遍,同步更新Blog劍指Offer(第二版)面試題3:陣列中重複的數字題目一:找出陣列中重複的數字 (限定不可以重複數字是-1,如果沒有重複數字,返回-1) 在一個長度為n的數組裡得所有
求陣列中兩個字串的最小距離 Python 版
題目: 給定一個數組 strs,其中的資料都是字串,給定兩個字串 str1,str2。如果這兩個字串都在 strs陣列中,就返回它們之間的最小距離;如果其中任何一個不在裡面,則返回 -1;如果兩個字串相等,則返回 0。 例如:給定[‘*’,’3’,’*’,’
求陣列中若干個元素之和等於給定值
這個問題的基礎版本是:在陣列中找兩個元素,使其之和等於某個給定值。解法簡單:將陣列排序後,用兩個指標分別位於陣列首與陣列尾,然後計算兩個指標所指元素的和,若大於給定的元素,則尾部的指標向前移動;若小於給定的元素,則首部的指標向後移動。 但該問題提升後,成為了子集和問題,這是
C# 陣列中兩個元素相加 = 某值 求兩個元素的下標 + 字典問題
private int[] GetElement_Two(int[] arry, int target) { Dictionary<int, int> dict = new Dictionary<int, int>();
java實現 陣列中兩個元素相加等於指定數的所有組合
package com.algorithm.hash; public class alg1 { public static void main(String argv[]) { int[] array1 = {10,2,7,4,5,6,3,8,9,1}; in
Leetcode421. 找出陣列中兩個元素異或的最大值
Leetcode421. Maximum XOR of Two Numbers in an Array 題目 Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai
設計一個演算法找到陣列中兩個元素相加等於指定數的所有組合
找出數組裡面任意兩個數相加等於某個k值(假設陣列中存在這樣的兩個數) ,這是以前在36氪二面問的一個演算法題。思路1:窮舉法,兩層for迴圈思路2:可以用hash表來儲存陣列中的元素,這樣我們取得一個數
c++ 找陣列中兩個元素,其和等於固定值sum,並輸出
週二去中興面試的,筆試題做的是選擇填空,加一道程式設計題。 程式設計題求得是陣列中兩個元素,求和等於固定值sum。 這題最簡單的方法當然是採用雙重迴圈,進行遍歷。但是這種方法的效率無疑是比較低的。複雜度是O(n^2)。 所以我就從另外一個角度進行分析:1. 先對陣列進行排序
【轉】漫畫:經典谷歌面試題“扔雞蛋”,看看你會做嗎?
第二天 題目:扔雞蛋問題 有2個雞蛋,從100層樓上往下扔,以此來測試雞蛋的硬度。比如雞蛋在第9層沒有摔碎,在第10層摔碎了,那
【面試題】求連結串列的環入口點
環入口點:我們設A是連結串列的起點,B是環的入口點,C是環內快慢指標的相遇點。兩個快慢指標定義為slow和fast. slow走的路程:A->B->C; fast走的路程:A->B->C->B->C; 2*(x+y)=x+y+z+y
【劍指Offer學習】【面試題36:陣列中的逆序對】
題目:在陣列中的兩個數字如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數。 舉例分析 例如在陣列{7, 5, 6, 4 中, 一共存在5 個逆序對,分別是(7, 6)、(7,5),(7, 4)
【面試題】求包含n個節點(從1到n,n個節點)的所有二叉搜尋樹
二叉搜尋樹滿足的條件 當前根節點的值大於左子樹節點的值 當前根節點的值小於右子樹節點的值 左右子樹同樣是二叉搜尋樹 根據上述規則可以看出,根節點值不同,形成的二叉搜尋樹就不同,那麼[1:n]範圍內的n個數就有n個不同的選擇。 [1:i−1]這i-1
【面試題】——求末尾 0 的個數
題目描述: 輸入一個正整數n,求n!(即階乘)末尾有多少個0? 比如: n = 10; n! = 3628800,所以答案為2 輸入描述: 輸入為一行,n(1 ≤ n ≤ 1000) 輸出描述: 輸出一個整數,即題目所求 示例1 輸入
【面試題】 求連結串列倒數第K個節點
題目:輸入一個連結串列輸出連結串列中的第K個節點,(計數從1開始),連結串列節點定義如下: //定義結構 struct ListNode { ListNode() :_next(NULL) ,_data(0) {} ListNode *_next; int