1. 程式人生 > >在 1--N 的連續陣列中找出唯一重複的元素

在 1--N 的連續陣列中找出唯一重複的元素

採用兩種方法:求和法和異或法

#include<iostream>
using namespace std;

//採用求和的方法
int Find_sum(int *a,int n)
{
int sum=0,sum1=0;   //用 sum 來儲存 1--N  這 N 個數的和,用 sum1 來儲存 1--N-1  這 N-1 個數的和
for(int i=0;i<n;i++)
sum += a[i];
for(int j=1;j<n;j++)
sum1 += j;
int result_sum = sum - sum1;
return result_sum;
}

//採用異或法
int Find_xor(int *a,int n)
{
int result=0,result1=0;   //用 result 來儲存 1--N  這 N 個數的異或值,用 result1 來儲存 1--N-1  這 N-1 個數的異或值
for(int i=0;i<n;i++)
result ^= a[i];
for(int j=1;j<n;j++)
result1 ^= j;
int result_xor = result^result1;
return result_xor;
}

int main()
{
int a[]={1,2,3,4,5,6,7,3,8,9};
int length_a=sizeof(a)/sizeof(a[0]);
cout<<"採用求和方法,在連續陣列中唯一重複的數為:"<<Find_sum(a,length_a)<<endl;
cout<<"採用異或方法,在連續陣列中唯一重複的數為:"<<Find_xor(a,length_a)<<endl;
system("pause");
return 0;
}

輸出結果:


相關推薦

1--N連續陣列唯一重複元素

採用兩種方法:求和法和異或法 #include<iostream> using namespace std; //採用求和的方法 int Find_sum(int *a,int n) {int sum=0,sum1=0;   //用 sum 來儲存 1--N  

陣列兩個元素的和等於指定數值,並輸出位置。

從陣列中找出和為指定值的第一對元素 1、這博文主要是實現了從陣列中找到兩個元素之和與指定值相等的元素,並輸出這兩個元素的陣列下標。 2、若有多對元素之和等於指定元素,那麼只需找到第一對並輸出結果即可。 程式思想及分析 1、通過快速排序對陣列進行排序,

在給定的陣列兩個元素和為給定值的所有元素

Design an algorithm to find all pairs of integers within an array which sum to a specified value.  使用hash map: 1假設V為給定的值,A為給定的陣列。 2建立has

給定一個n個整數的陣列S,是否存在S的4個數,使得a + b + c + d = target。 在陣列所有唯一的四元組,給目標的總和。

本題源自LeetCode ------------------------------------------ 思路1 :回溯法 超時 程式碼; vector<vector<int> > fourSum(vector<int> &

1.無序陣列兩個數使其和等於給定值

碰到這種類似題目可以根據條件不同寫出不同時間複雜度的程式碼: 1.最暴力的遍歷,時間複雜度為O(n^2) 2.一般情況下先排序,再從兩邊向中間搜尋結果,時間複雜度為O(nlogn + n) int i = 0, j = numbers.size() - 1; while

從倆個有序陣列第K小的數。要求時間複雜度O(logmin(m,n))

思路 該題目要求時間複雜度為O(log(min{m,n})) 所以不能直接遍歷任意一個數組這樣時間複雜度就不符合了。也不能對任意一陣列進行二分查詢,因為要求是倆個數組元素合併後的第K小的數,所以直接遍歷用二分遍歷任意一個數組也是行不通的。 故我們可以以

n個整數連續m個數加和是最大Java版

即上一篇Python版取連續加和最大的整數後,本篇部落格帶來Java版取連續加和最大的整數。總體的思路入上一次部落格中所述,就不在過多的闡述,關鍵就在於如何應用Java API寫出相同邏輯的程式碼。

無序陣列和為N的兩個數 Two Sum

如果是有序陣列,很簡單。兩頭指標往中間相遇即可。 因此對於無序陣列,排序即可。 唯一的麻煩題目要求的:要返回兩個數在排序之前原數組裡的序號。因此我需要在排序時也要保留原來的序列號。 這裡主要是以前不寫STL的程式。這裡用到vector。pair。sort。 vector常

n個整數連續m個數加和是最大Python版

最近在看資料時看到了一個如標題所示的面試題,面試題是Java版,正好最近在學Python,就先用Python實現了。畢竟life is short,use python(玩笑話,演算法設計思路是共同的

C++ 給定一個長度為N陣列一個最長的單調自增子序列(不一定連續,但是順序不能亂)輸出最長子序列的長度及對應的子序列

Evelyn QQ: 1809335179 給定一個長度為N的陣列,找出一個最長的單調自增子序列(不一定連續,但是順序不能亂)輸出最長子序列的長度及對應的子序列 #include<iostrea

javascript實現:在N個字串最長的公子串

  1 'use strict' 2 3 function 找出最長公子串 (...strings) { 4 let arraiesOfSubStrings = [] 5 arrayOfStrings.reduce((accumulator, currentVal

(pyhon)給定一個整數陣列 nums 和一個目標值 target,請你在該陣列和為目標值的那 兩個 整數,並返回他們的陣列下標。

方法一:使用最容易理解的遍歷陣列進行查詢 def solution(nums,target): #如果列表長度小於2,則直接結束 if len(nums) < 2: return #兩次迴圈列表,分別對列表中的所有可能的數字進行相加

8.7在陣列出現次數大於N÷K的數

題目 給定一個整形陣列arr,再給定一個整數K,列印所有出現次數大於N/K的數,如果沒有這樣的數,列印提示資訊。 首先分析K=2這個特殊情況,有以下思路: 排序後,取陣列中間的數。但該方法的時間複雜度為排序演算法的時間複雜度O(NlogN)。

陣列一對元素,其和是一個給定的目標數字。假設陣列只存在一個符合要求的數值對,返回這些數值的下標

【解題分析】對於陣列中某個下標i,如何判斷它是否屬於符合條件的兩個數字之一?最直觀的就是再次掃描數字,判斷target-array【i】是否存在於陣列中。這樣做時間複雜度O(n^2),效率不高,原因是沒有儲存之前的處理結果,每次都在做重複的工作。儘管效率不高,但

陣列只出現一次的兩個數,陣列其他數都出現兩次

題目:在陣列中有兩個數只出現一次,其他數均出現兩次。問怎樣快速找出這兩個數。 方法一: 直接遍歷整個陣列,建成類似hash的陣列。用原始陣列中元素值當hash陣列下標,出現次數當hash陣列元素值。最後再遍歷一次hash,找出值為1元素的下標。或者不用hash陣列,用ma

陣列四個數字的和等於指定數字(4Sum)

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in

陣列最大的兩個數

題目:從陣列區間A[lo, hi]中找出最大的兩個整數A[x1]和A[x2],要求元素比較的次數,要求儘可能的少 迭代版1: 如圖所示,當整個掃描一遍陣列A,找出最大的數x1後,再掃描一次陣

java 實現從無序陣列 第k大的數, 無序陣列充許有重複元素

要求找出第幾名的元素是什麼(找出B[i]的值)? 找出第k名的元素的值。          先從A中隨機一個下標index1, 然後進行一趟快速排序等到新陣列A1,排完了就知道index1對應的元素在A1中的新下標index2. 如果k等於index2,則A1[index2]就是要找的值。 如果 k小於in

陣列乘積最大的三個數

題目: 給定一個無序陣列,包含正數、負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度:O(n),空間複雜度:O(1)  輸入描述: 無序整數陣列A[n] 輸出描述: 滿足條件的最大乘積 輸入例子1: 3 4 1 2 輸出例子1: 24 思路: 由於空間複雜

1億個ip訪問次數最多的IP

問題一:怎麼在海量資料中找出重複次數最多的一個演算法思想:方案1:先做hash,然後求模對映為小檔案,求出每個小檔案中重複次數最多的一個,並記錄重複次數。        然後找出上一步求出的資料中重複次數最多的一個就是所求(如下)。問題二:        網站日誌中記錄了使用