zoukankan      html  css  js  c++  java
  • 数组中重复的数字

    解决问题思路1.

      

    代码实现:

    package j2;
    
    import java.util.Arrays;
    
    /**
     * Created by admin on 2019/5/8.
     */
    public class FindDuplicate {
    
        public static void duplicate(int[] numbers,int length,int[]duplication){
            //边界条件的判断
            if (numbers == null || length==0) {
                return ;
            }
            Arrays.sort(numbers);
            int j=0;
            for (int i=0;i<length-1;i++) {
                if (numbers[i] == numbers[i+1]) {
                    duplication[j] = numbers[i];
                    j++;
                }
            }
        }
    
        public static void main(String[] args) {
            int[] arr={2,3,1,0,2,5,3};
            int[] duplicate = new int[arr.length];
            duplicate(arr,arr.length,duplicate);
            System.out.println(Arrays.toString(duplicate));
        }
    
    }
    

      解题思路2.

    代码实现:

    解题思路3.

    代码实现:

    package j2;
    
    import java.util.Arrays;
    
    /**
     * Created by admin on 2019/5/8.
     */
    public class FindDuplicate2 {
    
        /***
         * 推荐的做法是:通过交换元素将i保存到numbers[i]中
         * 在numbers[i]不和i相等的时候,如果number[i]和numbers[numbers[i]]相等就说明是重复的元素
         * 否则就交换这两个元素,这个过程就是相当于排序
         * @param numbers
         * @param length
         * @param duplication
         */
        public static void duplicate(int[] numbers,int length,int[]duplication){
    
            if (numbers == null || length<= 0) {
                return ;
            }
            for (int i=0;i<length;i++) {
                if (numbers[i]<0 || numbers[i]>length-1) {
                    return;
                }
            }
            //如果i下标和i所指定的元素不同,那么我们就要进行交换,否则再比较要找的元素是否和i所指定的元素相同,如果是就是重复的元素
            int k=0;
            for (int i=0;i<length;i++) {
                while (numbers[i] != i){
                    //现在numbers[i] != i,设numbers[i]=j,所以如果下面的if成立,就是numbers[i] = numbers[j],说明重复
                    if (numbers[i] == numbers[numbers[i]]) {
                        duplication[k] = numbers[i];
                        k++;
                        break;
                    }
                    //交换元素
                    swap(numbers,i,numbers[i]);
                }
            }
    
        }
    
        //交换元素
        private static void swap(int[] numbers, int p, int q) {
    
            int temp = numbers[p];
            numbers[p] = numbers[q];
            numbers[q] = temp;
    
        }
    
        public static void main(String[] args) {
            int[] arr={2,3,1,0,2,5,3};
            int[] duplicate = new int[arr.length];
            duplicate(arr,arr.length,duplicate);
            System.out.println(Arrays.toString(duplicate));
        }
    
    }
    

      

  • 相关阅读:
    《逆向工程核心原理》——通过调试方式hook Api
    《逆向工程核心原理》——代码注入
    《逆向工程核心原理》——DLL注入与卸载
    《逆向工程核心原理》Windows消息钩取
    windows回收站无法设置
    windbg安装pykd记录
    博客园添加萝莉小人
    ImportError: No module named site
    *CTF——Re复现
    ida远程调试Linux文件
  • 原文地址:https://www.cnblogs.com/airycode/p/10831321.html
Copyright © 2011-2022 走看看