美文网首页
【桶排序】[位运算交换值]

【桶排序】[位运算交换值]

作者: 白璞1024 | 来源:发表于2019-10-15 19:11 被阅读0次

【桶排序】[位运算交换值]40、求最小值

给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

示例 1:

​ 输入: [1,2,0]
​ 输出: 3

示例 2:

​ 输入: [3,4,-1,1]
​ 输出: 2
示例 3:

​ 输入: [7,8,9,11,12]
​ 输出: 1
说明:

​ 你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。

分析:

桶排序方法:比如有num[] = 4213152这一串数字,然后进行遍历

  1. 4213152//第0位是4所以第0位和第4-1位换位置
  2. 3214152//现在0位是3,和第3-1位换位置
  3. 1234152//第0位没问题 第一位没问题,第二位没问题,第三位是1,本来应该和0位换位置,但是0位也是1就不换了,下一个5和第四位换位置
  4. 1234512//1和第0位又一样,过,然后 第6位值2和第一位换位置,也是2
  5. 遍历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&&currentVal>=1&&currentVal<nums.length&&nums[currentVal-1]!=currentVal) {
                //这个时候如何处理将i位置的数字放至标准呢为止
                switchPlace(nums,i,currentVal-1);
                i--;
            }
        }
        
        System.out.println(nums);
        //第二部,找到第一个数字
        
        for (int i = 0; i < nums.length; i++) {
            //
            int currentVal = nums[i];
            if(i+1!=currentVal) {
                //这个时候如何处理将i位置的数字放至标准呢为止
                return i+1;
            }
        }
        return nums.length+1;
    }
    private void switchPlace(int[] nums, int i, int j) {
        // TODO Auto-generated method stub
        System.out.println("i"+i+"j"+j);
        int temp = nums[j];
        nums[j] = nums[i];
        nums[i] = temp;
    }

另外位运算交换值:

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

相关文章

  • 【桶排序】[位运算交换值]

    【桶排序】[位运算交换值]40、求最小值 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:​ ...

  • 排序算法

    桶排序,冒泡排序,快速排序原理 桶排序(计数排序) 新建一个数组(最大值+1位) [0,最大值],初始都为0是几就...

  • 读书心得--啊哈算法

    最快最简单的排序——桶排序,优点:时间复杂度低,缺点:耗费空间 交换相邻数据的排序——冒泡排序 优点:解决了桶排序...

  • 全排列与全组合

    递归+交换值实现全排列 非重复的全排列 位运算实现全组和

  • jsday01

    js 交换两个值的方法 方法一 方法二(适用于数字交换) 方法三(位运算) 什么时候值是undefined (变量...

  • 桶排序,计数排序和基数排序

    桶排序 桶排序的核心思路 桶排序的核心处理思想是先定义几个有序的桶,将要排序的数组按照桶划分的值的范围分到这几个桶...

  • 2019-11-16

    桶:容器计数排序基数排序 题目:有N个数,就准备N+1个桶最小值放0号桶,最大值放N+1号桶

  • JavaScript:十大排序的算法思路和代码实现

    本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(...

  • 2.8计数排序打卡

    2.7计数排序时间复杂度o(n) 不是基于比较的排序算法,来自于桶排序 思路:1.根据最大值,最小值创建若干个桶(...

  • 排序

    交换排序 让每个值都和它后面的值比较,如果打则交换,这样第一位置的值在一次循环后就是最小值,然后第二次循环找出第二...

网友评论

      本文标题:【桶排序】[位运算交换值]

      本文链接:https://www.haomeiwen.com/subject/fdicuctx.html