桶排序 位運算交換值

2021-10-02 21:55:10 字數 945 閱讀 6685

給定乙個未排序的整數陣列,找出其中沒有出現的最小的正整數。

示例 1:

​ 輸入: [1,2,0]

​ 輸出: 3

示例 2:

​ 輸入: [3,4,-1,1]

​ 輸出: 2

示例 3:

​ 輸入: [7,8,9,11,12]

​ 輸出: 1

說明:​ 你的演算法的時間複雜度應為o(n),並且只能使用常數級別的空間。

分析:

桶排序方法:比如有num = 4213152這一串數字,然後進行遍歷

4213152//第0位是4所以第0位和第4-1位換位置

3214152//現在0位是3,和第3-1位換位置

1234152//第0位沒問題 第一位沒問題,第二位沒問題,第三位是1,本來應該和0位換位置,但是0位也是1就不換了,下乙個5和第四位換位置

1234512//1和第0位又一樣,過,然後 第6位值2和第一位換位置,也是2

遍歷num比較下標i和值val 是否符合i=val-1找到第乙個不符合的,然後返回

public int firstmissingpositive(int nums) {

// 第一步,對需要進行調整的資料進行整理

for (int i = 0; i < nums.length; i++) {

//int currentval = nums[i];

system.out.println(i+"*****="+currentval);

if(currentval!=i+1&¤tval>=1&¤tval另外位運算交換值:

nums[i] = nums[i]^nums[j];

nums[j] = nums[j]^nums[i];

nums[i] = nums[j]^nums[i];

陣列的 正序排序 倒序排序 值交換

陣列正序排序 int arr 遍歷,將元素進行比較 for int i 0 i arr.length i 展示結果 system.err.println arrays.tostring arr 陣列倒序排序 int arr 遍歷,將元素進行比較 for int i 0 i arr.length i ...

交換兩個變數的值 位運算

一般我們交換兩個變數的值,採用的方法都是設定乙個臨時變數,用於暫存變數的值,如下 int tmp tmp x x y y x 當然也可以採用函式形式 void exchage int x,int y 採用位運算的方式可以提交 的執行效率,通過 異或運算子便可以巧妙地交換兩個變數的值。x x y y ...

單鏈表進行排序 通過節點交換,不通過值交換

原來我一直都不會對鍊錶進行排序,呵呵,比較菜。今天下了很大的功夫學習對鍊錶的排序,和大家分享一下!對鍊錶的排序主要有兩種方法 一 只交換節點中的元素,不改變鍊錶的順序。二 直接交換節點,不改變節點中的元素。其中交換節點是最麻煩的,稍不注意就會出錯!而交換節點中的元素還是比較簡單的。用幾個swap 就...