partition 1 找出陣列的重複數字

2021-10-12 06:00:23 字數 508 閱讀 8855

不修改陣列找到重複數字,在長度為n+1的陣列中數字為1到n,則至少有乙個是重複的,找出它,但不能修改陣列。

(1)首先因為不能修改陣列,所以只能建立輔助陣列,思路很簡單

(2)如果可以修改則可以利用陣列中數特點,陣列的數大小都在0到1之間,然後迴圈排序將數字換到和它下標一樣的地方去,然後遍歷找到乙個下標和數字不同的數字返回。

(3)如果要空間複雜度為o(1),則不能建立輔助陣列,因為一定包含乙個重複的數字,所以將陣列根據中間的值分成兩部分,一部分是1-v,一部分是v-n,v是中間值,如果1

-v中的值個數超過了v,則肯定在前一半中有重複數字,然後繼續分割,類似於二分法的思想。例如1-8,中間的數字為4,則遍歷陣列,看有多少個數字在1-4中,如果發現有5個,則重複數字肯定在1-4中,然後再看2,當然了二分法不用遞迴,就用乙個while改變start和end值就可以。在這個while迴圈中遍歷演算法要被呼叫logn次,每次遍歷o(n),所以時間複雜度是o(nlogn),相當於拿時間換空間,所以根據需求和條件的不同,所採取的演算法也是不一樣的

陣列與矩陣 陣列的partition調整

題目 陣列的partition調整 要求 給定乙個有序陣列arr,調整arr是的這個陣列的左半部分沒有重複元素且公升序,而不用保證右半部分有序 例如 arr 1,2,2,2,3,3,4,5,6,6,7,7,8,8,8,9 調整後為arr 1,2,3,4,5,6,7,8,9,補充題目 給定乙個陣列ar...

1 找出陣列中重複的數字

方法1 通過構建hashmap,記錄每個值的重複情況。複雜度 o n o 1 class solution mapmap new hashmap for int i 0 i nums.length i else return 1 方法2 由於題目特徵,構建1 n 1的桶 將每個數字放到對應下標的正確...

演算法 陣列的partition調整

給定乙個有序陣列arr,調整arr使得這個陣列的左半部分沒有重複部分且公升序,而不用保證右部分是否有序。例如 arr 1,2,2,2,3,3,4,5,6,6,7,7,8,8,9,9 調整之後arr 1,2,3,4,5,6,7,8,9 時間複雜度o n 額外空間複雜度o 1 public static...