異或-成對陣列丟一值如何快速找出
1-題目
:
成對出現數字儲存在磁碟檔案中,但成對的數字不一定是相鄰的,如2,5,3, 4,7,3, 4,2,5...
,由於意外有一個數字丟失了,如何儘快的找到是哪個數字丟失了?
2-思路
:
由於有一個數字丟失了,那必定有一個數只出現一次而且其它數字都出現了兩次。
異或的特性 : 自己與自己
異或結果為0;異或滿足交換律
。
3-程式碼
:
int[] arr = {2, 4, 6, 5, 8, 2, 5, 6, 4}; int result = 0; for (int i = 0; i < arr.length; i++) { result ^= arr[i]; } System.out.println("lost : " + result);
相關推薦
異或-成對陣列丟一值如何快速找出
1-題目 : 成對出現數字儲存在磁碟檔案中,但成對的數字不一定是相鄰的,如2,5,3, 4,7,3, 4,2,5...,由於意外有一個數字丟失了,如何儘快的找到是哪個數字丟失了? 2-思路 : 由於有一個數字丟失了,那必定有一個數只出現一次而且其它數字都出現了兩次。 異或的特性 :
第一個問題是給出2n+1個數,其中有n個數是成對出現的,讓我找出裡面只出現了一次的那個數。
題目:給你n個數,其中有且僅有一個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那一個數。給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。答案:從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是因為異或
在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。
/* 最簡單的思路:陣列的所有數兩兩比較,進行累加,空間複雜度為O(n^2) */ class Solution { public: int InversePairs(vector<int> data) { int P
用異或實現查詢只出現一次的數字
C語言中我對按位異或這種運算不太懂,通過這道題熟悉了一些相關的運算以及基本性質。 題目如下: 一個數組中只有兩個數字是出現一次,其他所有數字都出現了兩次,請找出這兩個數字。 首先對於這樣一道題我是具
在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%100000000
分析:可以利用兩層for迴圈,從頭開始遍歷查詢每一個元素的逆序對數,然後求總和。也可以利用歸併排序的思想來求解。下面是利用歸併排序的思想求解 public class Solution{public int InversePairs(int[] array) {if (ar
異或交換兩個變數的值
通常做法 #include<stdio.h> #include<stdlib.h> int main() { int a=10, b=20,temp; temp=a; a=b;
關於通過異或交換兩個元素的值的一個陷阱
#include <stdio.h> #include <iostream> using namespace std; void swap(int *a,int *b){ *a = *a ^ *b; *b = *a ^ *b;//將a的值賦給了
HUST——1106xor的難題之二(異或樹狀陣列單點修改和區間查詢)
輸入T(T <= 100)組資料,每組資料第一行輸入n(1 <=n <= 10^4)和q(1 <=q <= 10^4),接下來一行輸入n個數字ai(0 <=ai <= 10^9),接下來是q個操作:"1 L R"表示詢問L到R之間的xor值(1 <=L &l
Mishka and Interesting sum 區間異或+樹狀陣列+離線處理
知識:樹狀陣列 題意: 給你n個數,然後詢問q次,每次詢問查詢區間[l,r]裡的出現過偶數次的那些數的亦或值 解析: 首先是出現偶數次,到底是哪些數。 設Al為整個區間的異或,Odd為區間內奇數次的數的異或,Even為區間內出現偶數次的數的異或(E
快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值
http 知識 繼續 進一步 repl 有一個 tails 窮舉 too 我覺得寫得很清晰,希望沒有侵犯作者的著作權,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一個數組中的兩個數字,讓這
程式設計師面試題:快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值
能否快速找出一個數組中的兩個數字,讓這兩個數字之和等於一個給定的值,為了簡化起見,我們假設這個陣列中肯定存在至少一組符合要求的解。 假如有如下的兩個陣列,如圖所示: 5,6,1,4,7,9,8 給定Sum= 10 1,5,6,7,8,9 給定Sum=
演算法1:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數的index值。
三種解決方法: 1、暴力法:遍歷每個num,查詢目標元素target-num class Solution: def twoSum(self, nums, target): """ :type nums: List[
PHP判斷陣列中是否有重複值並找出重複值
可以用來測試需要唯一憑據號碼的,是否有重複值,不過一般直接使用uuid了,簡單粗暴就解決問題,這個就簡單的測試生成的資料是否有重複值吧 <?php /* * @Author: wyy * @Date: 2019-01-09 13:34:16 * @Email:
Two Sum(給定一個值,找出一個數組中“和”為該值的數值組合)
import java.util.HashMap; /** * Two Sum * * Given an array of integers, find two numbers such * that they add up to a specifi
jquery比較兩個陣列是否相等,且找出不等的值。
<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js"> &l
在一個存十個數的陣列中 使用者輸入一個數 查找出該數所在的位置
#include "stdafx.h" #include "stdlib.h" void main() { int a[10],i,j,k,sum=0; printf("Pl
陣列a[N],1-N-1這N-1個數存放在a[n]中,其中某個數重複一次,找出重複數字
public class quchong { /** * 數學求和法 陣列所有項求和 減去1-n-1的和 */ public static void main(String[] args) { // TODO Au
對輸入一串字串找出最大的數字
憂桑,中午11點有一場百詞斬的筆試,但是11.10十分才知道,匆匆忙忙的回到宿舍開啟電腦做題,三題程式設計題,做出了第三道,本地編譯通過,但是到牛客上就是不通過,憂桑。現在貼出第一道題目。要求:輸入一串字串, 包含字母和數字, 輸出最大的數字。比如:fasdf323fajs4
演算法:給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數、判斷一個整數是否是迴文數
<!-- 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9
快速找出一個數組中的最大數、第二大數
#include <stdio.h> int main() { int a[] = {12, 159, 8, 1, 165, 122, 56, 99, 165}; int