JAVA蛮力法数组去重及荷兰国旗问题

152 阅读2分钟

我正在参加「掘金·启航计划」

问题1:

在数组r[n]中删除重复的元素,要求移动元素的次数较少并使剩余元素的相对次序保持不变。

根据问题设计算法,该问题可以使用蛮力法

首先介绍一下蛮力法:

蛮力法是指采用遍历(扫描)技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。依次处理所有元素是蛮力法的关键,为了避免陷入重复试探,应保证处理过的元素不再被处理。

也就是说需要遍历数组,同时遍历次数尽量少点

使用Java语言进行实现

import java.util.ArrayList;
import java.util.List;

public class manlifa3 {
    public static void main(String[] args) {

        int[] r = {5, 6, 6, 6, 8, 7, 4};
        List<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < r.length; i++) {
            if (!list.contains(r[i])) {
                list.add(r[i]);
            }

        }
        System.out.println("去除重复后的list集合" + list);
    }
}

这样就能实现对数组r[]的去重操作。

问题2: 荷兰国旗问题

要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表蓝色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其次,B排在最后。

为荷兰国旗问题设计一个算法,其时间性能是O(n)。

这里用012代替RWB

public class HeLanGuoQi {



        public void getHollandSort ( int[] A){
            int begin = 0;
            int current = 0;
            int end = A.length - 1;
            while (current <= end) {
               
                if (A[current] == 0) {
                    swap(A, begin, current);
                    begin++;
                    current++;
                } else if (A[current] == 1)
                    current++;
                else if (A[current] == 2) {
                    swap(A, current, end);
                    end--;
                }
            }

            //输出排完序后的数组A相应元素
            System.out.println("对数组A进行划分后的元素顺序为:");
            for (int i = 0; i < A.length; i++)
                System.out.print(A[i] + " ");
        }

        //交换数组A中m位置和n位置上元素的值
        public void swap ( int[] A, int m, int n){
            int temp = A[m];
            A[m] = A[n];
            A[n] = temp;
        }

        public static void main (String[]args){
            HeLanGuoQi test = new HeLanGuoQi();
            int[] A = {2, 0, 2, 0, 0, 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 2, 0, 1, 0, 2, 1, 0, 2, 0, 1, 2, 0, 1, 2, 0, 2, 1, 0};
            test.getHollandSort(A);


        }
    }

这样就解决了荷兰国旗问题