Поиск повторяющихся чисел в графе

136
12 июля 2019, 01:20

Дан массив A длины (n+1), содержащий натуральные числа от 1 до n. Найти любой повторяющийся элемент за время O(n), не изменяя массив и не используя дополнительной памяти.

public class Graph{
    private final int MAX_VERTS = 9;
    public Vertex vertexList[]; // Список вершин
    private int adjMat[][]; // Матрица смежности
    private int nVerts; // Текущее количество вершин
    private StackX theStackX;
    public Graph(){
        vertexList = new Vertex[MAX_VERTS];
        adjMat = new int[MAX_VERTS][MAX_VERTS];
        nVerts = 0;
        for (int i = 0; i < MAX_VERTS; i++)
            for (int j = 0; j < MAX_VERTS; j++)
                adjMat[i][j] = 0;
            theStackX = new StackX();
    }

    // Метод возвращает непосещенную вершину, смежную по отношению к v
    public int getUnvisitedVertex(int v){
        for (int i = 0; i < nVerts; i++) {
            if (adjMat[v][i] == 1 && vertexList[i].wasVisited == false)
                return i;
        }
        return -1;
    }
    // обход в глубину
    public void dfs(){
        vertexList[0].wasVisited = true;
        displayVertex(0);
        theStackX.push(0);
        while (!theStackX.isEmpty()){
            int v = getUnvisitedVertex(theStackX.peek());
            if (v == -1)
                theStackX.pop();
            else{
                vertexList[v].wasVisited = true;
                displayVertex(v);
                theStackX.push(v);
            }
        }
        //System.out.println(c);
        // Стек пуст, работа закончена
        for (int i = 0; i < nVerts; i++) {
            vertexList[i].wasVisited = false;
        }
    }
    // Добавляем вершину
    public void addVertex(int val){
        vertexList[nVerts++] = new Vertex(val);
    }
    // Добавляем края
    public void addEdge(int start, int end){
        adjMat[start][end] = 1;
        adjMat[end][start] = 1;
    }
    public void displayVertex(int v){
        System.out.print(vertexList[v].value + " ");
    }
}

public class Vertex {
    public int value;
    public boolean wasVisited;
    public Vertex(int value){
        this.value = value;
        wasVisited = false;
    }
}

public class StackX {
    private final int SIZE = 20;
    private int[] st;
    private int top;
    public StackX(){
        st = new int[SIZE];
        top = -1;
    }
    // Размещение элемента в стеке
    public void push(int j){
        st[++top] = j;
    }
    // Извлечение элемента из стека
    public int pop(){
        return st[top--];
    }
    // Чтение с вершины стека
    public int peek(){
        return st[top];
    }
    // Если стек пуст
    public boolean isEmpty(){
        return top == -1;
    }
}

import java.util.ArrayList;
public class Runner {
    private static ArrayList<Integer> list = new ArrayList<>();
    public static void main(String[] args) {
        Graph theGraph = new Graph();
        theGraph.addVertex(3);
        theGraph.addVertex(5);
        theGraph.addVertex(3);
        theGraph.addVertex(10);
        theGraph.addVertex(7);
        theGraph.addVertex(4);
        theGraph.addVertex(0);
        theGraph.addVertex(2);
        theGraph.addVertex(4);
        theGraph.addEdge(0, 1);
        theGraph.addEdge(1, 2);
        theGraph.addEdge(2, 3);
        theGraph.addEdge(3, 4);
        theGraph.addEdge(4, 5);
        theGraph.addEdge(4, 6);
        theGraph.addEdge(4, 7);
        theGraph.addEdge(4, 8);

        System.out.println("Visits: ");
        theGraph.dfs();
        System.out.println();
    }
}

Посещаю все вершины, но не знаю как находить повторяющиеся числа.

READ ALSO
Как устранить Утечку Памяти

Как устранить Утечку Памяти

Здорова всемЗа ранее я извиняюсь, Я не силён на русском языке

161
Можно выбрать 2 элемента навигации слайдера за раз

Можно выбрать 2 элемента навигации слайдера за раз

Я использую slick slider для каруселькиНа тач девайсах я могу выбрать сразу 2 элемента навигации по слайдеру (2 точки)

173
TypeScript внутренние модули

TypeScript внутренние модули

В компиляторе языка программирования TypeScript есть возможность генерации JavaScript с использованием "внутренних модулей", при этом на выходе получается...

145