資料結構面試題總結2——陣列:求出現次數超過一半的元素
遇到這個題最簡單的想法就是,統計每個元素出現的次數。但是無法知道陣列中有多少種元素,並且這樣會用到其他的儲存空間,再查詢結果的時候也需要多遍歷一次結果的陣列。
正確的解決辦法是去記錄重複元素(不管是否是結果元素)的數量,然後碰見一個不同元素就減一(相當於抵消了),碰見結果元素也是一樣的。
思考一下,結果元素會超出一半,所以當所有不同元素被抵消完肯定還會剩下結果元素。
這種方法只遍歷一次陣列。
int FindNum(int *a, int n) { int result = a[0]; int result_count = 1; for (int i = 1; i < n; i++) { if (a[i]==result) { result_count++; } else { result_count--; if (result_count==0) { result = a[i]; result_count = 1; } } } return result; }
相關推薦
資料結構面試題總結2——陣列:求出現次數超過一半的元素
遇到這個題最簡單的想法就是,統計每個元素出現的次數。但是無法知道陣列中有多少種元素,並且這樣會用到其他的儲存空間,再查詢結果的時候也需要多遍歷一次結果的陣列。 正確的解決辦法是去記錄重複元素(不管是否是結果元素)的數量,然後碰見一個不同元素就減一(相當於抵消了),碰見結果元
資料結構面試題總結1——陣列:求最大、次大值
一般大家一開始想到的辦法就是一次迴圈,記錄下最大值和最小值。或者就是用兩次冒泡,找到最大值和次大值。 這兩種方法實踐複雜度差不多都是O(2n),如果陣列很長,效率還是不夠高的。 注意:直接排序,再選擇最大的兩個值,這並不是一個好辦法,因為我們只需要前兩個數有序,不需要後N-
資料結構面試題總結6——陣列:求兩個陣列中滿足給定和的兩個元素
問題描述:在兩個有序陣列中,分別找出a,b兩個元素滿足a+b = c,c已知。 分析:我們要用有序這個有利條件,避免迴圈中套迴圈。我們用兩個索引i,j分別指向陣列A,B的首尾,根據比較的結果來移動索引的位置。 如果 A[i] + B[j] < c , i+
資料結構面試題總結5——陣列:找出陣列中唯一一個出現一次的元素
問題描述:一個數組其中有一個元素出現了一次(奇次),其他元素都出現兩次(偶數次數),找出出現一次(奇次)的元素。 分析:碰到這種偶次奇次的問題,首先要想一下位運算中的異或。一個數異或本身為0,一個數異或0不變。a ^ a = 0, a ^ 0 = a。 這個題中,我們可以把
資料結構面試題oj練習
題 oj 連結:https://leetcode-cn.com/problems/remove-linked-list-elements/description/ /** * Definition for singly-lin
Java 程式設計師必須掌握的 8 道資料結構面試題,你會幾道
瑞士電腦科學家Niklaus Wirth在1976年寫了一本書,名為《演算法+資料結構=程式設計》。 40多年後,這個等式仍被奉為真理。這就是為什麼在面試過程中,需要考察軟體工程師對資料結構的理解。 幾乎所有的問題都需要面試者對資料結構有深刻的理解。無論你是初入職場的
百度面試題:找出陣列中出現次數超過一半的數
現在有一個數組,已知一個數出現的次數超過了一半,請用O(n)的複雜度的演算法找出這個數。 Thinking……/>/> Thinking……/>/>/> Thinking……/>/>/> Thinking……/>/>/> Think
資料結構面試題(含答案)
1.棧和佇列的共同特點是(只允許在端點處插入和刪除元素) 4.棧通常採用的兩種儲存結構是(線性儲存結構和連結串列儲存結構) 5.下列關於棧的敘述正確的是(D) A.棧是非線性結構B.棧是一種樹狀結構C.棧具有先進先出的特徵D.棧有後進先出的特徵 6.連結串列不具有的特點是(B)A.不必事先估計儲存
資料結構面試題/判斷一棵樹是否是完全二叉樹
二叉樹: 1.滿二叉樹:在一棵二叉樹中,如果所有分支節點都存在左子樹和右子樹,並且所有葉子節點都在同一層上。 2.完全二叉樹:如果一棵具有N個結點的二叉樹的結構與滿二叉樹的前N個結點的結構相同,稱為完全二叉樹。 //判斷一棵二叉樹是否是完全二叉樹--利
大資料研發面試題總結
面試方向:大資料研發 Java部分 Java的集合類有哪些? ArrayList和LinkedList的區別 ArrayList的動態擴容是怎麼實現的 HashMap的底層儲存結構是什麼樣的
python+演算法+資料結構+面試題
一、單鏈表反轉 #!/usr/bin/python #遞迴實現單鏈表反轉 class ListNode(object): def __init__(self,x): self.val=x self.next=None def recurse(hea
Java常見資料結構面試題(帶答案)
1.棧和佇列的共同特點是(只允許在端點處插入和刪除元素)4.棧通常採用的兩種儲存結構是(線性儲存結構和連結串列儲存結構)5.下列關於棧的敘述正確的是(D) A.棧是非線性結構B.棧是一種樹狀結構C.棧具有先進先出的特徵D.棧有後進先出的特徵6.連結串列不具有的特點是(
Java資料結構面試題
1.棧和佇列的共同特點是(只允許在端點處插入和刪除元素) 4.棧通常採用的兩種儲存結構是(線性儲存結構和連結串列儲存結構) 5.下列關於棧的敘述正確的是(D) A.棧是非線性結構B.棧是一種樹狀結構C.棧具有先進先出的特徵D.棧有後進先出的特徵 6.連結串列不具有的
面試題:數組中出現次數超過一半的數字
contain for get() [] more port put ray map 題目描述: 方法1:哈希表 import java.util.HashMap; public class Solution { public int MoreThanHalfNu
資料結構Stack例項(三):求元素的下一個更大的值
題目:給定一個數組,打印出每一個元素的下一個更大的元素( Next Greater Element,NGE )。一個元素x的下一個更大的元素是指在x的右邊第一個比該元素大的元素。如果沒有更大的
面試題56 - I. 陣列中數字出現的次數
#### [面試題56 - I. 陣列中數字出現的次數](https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/) 一個整型陣列 `nums` 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出
劍指Offer39:陣列中出現次數超過一半的數字
題目: 陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。 例如,輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}.由於數字2在這個陣列中出現了5次,超過陣列 長度的一半,因此輸出2 分析: 若一個數組中有一個數字出現了陣列長度的一半以上,則必是這個陣列的中位數
劍指offer程式設計題(JAVA實現)——第28題:陣列中出現次數超過一半的數字
github https://github.com/JasonZhangCauc/JZOffer import java.util.Arrays; /** * * 劍指offer程式設計題(JA
程式設計師面試題目總結--陣列(三)【旋轉陣列的最小數字、旋轉陣列中查詢指定數、兩個排序陣列所有元素中間值、陣列中重複次數最多的數、陣列中出現次數超過一半的數】
11、求旋轉陣列的最小數字 題目:輸入一個排好序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 分析:陣列的旋轉:把一個數組最開始的若干個元素搬到陣列的末尾。例如陣列{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個旋轉,該陣列的最小值為1。這道題最直觀的解
出現次數超過一半的數(面試題)
出現次數超過一半的數 題目描述 陣列中有一個數出現的次數超過了陣列長度的一半,找出這個數。 分析與解法 因為不確定給定的陣列是無序還是有序的,所以要分情況討論。 解法一:排序 如果給定