Дан массив 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();
}
}
Посещаю все вершины, но не знаю как находить повторяющиеся числа.
Я использую slick slider для каруселькиНа тач девайсах я могу выбрать сразу 2 элемента навигации по слайдеру (2 точки)
В компиляторе языка программирования TypeScript есть возможность генерации JavaScript с использованием "внутренних модулей", при этом на выходе получается...