Binary search
import java.util.Scanner;
import java.util.Arrays;
class BinarySearch
{
public static int binarySearch(int a[],int key,int low,int high)
{
if(low>high)
return 0;
else{
int mid=(low+high)/2;
if(key==a[mid])
return mid;
else if(key>a[mid])
return binarySearch(a,key,mid+1,high);
else
return binarySearch(a,key,low,mid-1);
}
}
public static void main(String args[]){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++)
{
a[i]=s.nextInt();
}
Arrays.sort(a);
int key=s.nextInt();
int low=0;
int high=a.length;
int result=binarySearch(a,key,low,high);
System.out.println("The key value "+key+" found at the position "+result);
}
}
import java.util.Scanner;
import java.util.Arrays;
class MinMaxOfArray
{
public static void min_max(int a[])
{
int max=a[0];
int min=a[0];
for(int i=1;i<a.length;i++)
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
System.out.println("Min element of array "+min);
System.out.println("Max element of array "+max);
}
public static void main(String args[]){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++)
{
a[i]=s.nextInt();
}
min_max(a);
}
}
import java.util.Arrays;
class Mergesort{
public static void main(String[] args) {
int[] array = {38, 27, 43, 3, 9, 82, 10};
System.out.println("Original Array: " + Arrays.toString(array));
mergeSort(array, 0, array.length - 1);
System.out.println("Sorted Array: " + Arrays.toString(array));
}
public static void mergeSort(int[] array, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(array, left, mid);
mergeSort(array, mid + 1, right);
merge(array, left, mid, right);
}
}
public static void merge(int[] array, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
int[] leftArray = new int[n1];
int[] rightArray = new int[n2];
for (int i = 0; i < n1; i++) {
leftArray[i] = array[left + i];
}
for (int j = 0; j < n2; j++) {
rightArray[j] = array[mid + 1 + j];
}
int i = 0, j = 0;
int k = left;
while (i < n1 && j < n2) {
if (leftArray[i] <= rightArray[j]) {
array[k] = leftArray[i];
i++;
} else {
array[k] = rightArray[j];
j++;
}
k++;
}
while (i < n1) {
array[k] = leftArray[i];
i++;
k++;
}
while (j < n2) {
array[k] = rightArray[j];
j++;
k++;
}
}
}
quick sort
import java.util.Arrays;
class Quicksort {
public static void main(String[] args) {
int[] array = {38, 27, 43, 3, 9, 82, 10};
System.out.println("Original Array: " + Arrays.toString(array));
quickSort(array, 0, array.length - 1);
System.out.println("Sorted Array: " + Arrays.toString(array));
}
public static void quickSort(int[] array, int low, int high) {
if (low < high) {
int pivotIndex = partition(array, low, high);
quickSort(array, low, pivotIndex - 1);
quickSort(array, pivotIndex + 1, high);
}
}+
public static int partition(int[] array, int low, int high) {
int pivot = array[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (array[j] <= pivot) {
i++;
swap(array, i, j);
}
}
swap(array, i + 1, high);
return i + 1;
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
stressans matrix
import java.util.Scanner;
public class Strassen
{
public int[][] multiply(int[][] A, int[][] B)
{
int n = A.length;
int[][] R = new int[n][n];
if (n == 1)
R[0][0] = A[0][0] * B[0][0];
else
{
int[][] A11 = new int[n/2][n/2];
int[][] A12 = new int[n/2][n/2];
int[][] A21 = new int[n/2][n/2];
int[][] A22 = new int[n/2][n/2];
int[][] B11 = new int[n/2][n/2];
int[][] B12 = new int[n/2][n/2];
int[][] B21 = new int[n/2][n/2];
int[][] B22 = new int[n/2][n/2];
split(A, A11, 0 , 0);
split(A, A12, 0 , n/2);
split(A, A21, n/2, 0);
split(A, A22, n/2, n/2);
split(B, B11, 0 , 0);
split(B, B12, 0 , n/2);
split(B, B21, n/2, 0);
split(B, B22, n/2, n/2);
int [][] M1 = multiply(add(A11, A22), add(B11, B22));
int [][] M2 = multiply(add(A21, A22), B11);
int [][] M3 = multiply(A11, sub(B12, B22));
int [][] M4 = multiply(A22, sub(B21, B11));
int [][] M5 = multiply(add(A11, A12), B22);
int [][] M6 = multiply(sub(A21, A11), add(B11, B12));
int [][] M7 = multiply(sub(A12, A22), add(B21, B22));
int [][] C11 = add(sub(add(M1, M4), M5), M7);
int [][] C12 = add(M3, M5);
int [][] C21 = add(M2, M4);
int [][] C22 = add(sub(add(M1, M3), M2), M6);
join(C11, R, 0 , 0);
join(C12, R, 0 , n/2);
join(C21, R, n/2, 0);
join(C22, R, n/2, n/2);
}
return R;
}
public int[][] sub(int[][] A, int[][] B)
{
int n = A.length;
int[][] C = new int[n][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
C[i][j] = A[i][j] - B[i][j];
return C;
}
public int[][] add(int[][] A, int[][] B)
{
int n = A.length;
int[][] C = new int[n][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
C[i][j] = A[i][j] + B[i][j];
return C;
}
public void split(int[][] P, int[][] C, int iB, int jB)
{
for(int i1 = 0, i2 = iB; i1 < C.length; i1++, i2++)
for(int j1 = 0, j2 = jB; j1 < C.length; j1++, j2++)
C[i1][j1] = P[i2][j2];
}
public void join(int[][] C, int[][] P, int iB, int jB)
{
for(int i1 = 0, i2 = iB; i1 < C.length; i1++, i2++)
for(int j1 = 0, j2 = jB; j1 < C.length; j1++, j2++)
P[i2][j2] = C[i1][j1];
}
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Strassen Multiplication Algorithm Test\n");
Strassen s = new Strassen();
int N = 4;
int[][] A = { { 1, 1, 1, 1 },
{ 2, 2, 2, 2 },
{ 3, 3, 3, 3 },
{ 2, 2, 2, 2 } };
int[][] B = { { 1, 1, 1, 1 },
{ 2, 2, 2, 2 },
{ 3, 3, 3, 3 },
{ 2, 2, 2, 2 } };
System.out.println("\nArray A =>");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
System.out.print(A[i][j] +" ");
System.out.println();
}
System.out.println("\nArray B =>");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
System.out.print(B[i][j] +" ");
System.out.println();
}
int[][] C = s.multiply(A, B);
System.out.println("\nProduct of matrices A and B : ");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
System.out.print(C[i][j] +" ");
System.out.println();
}
}
}
knapsack problem
public class KnapSack{
static int knapSack(int w,int wt[],int val[],int n)
{
int dp[][]=new int[n+1][w+1];
for(int i=0;i<n;i++)
{
for(w=0;w<w;w++)
{
if(i==0||w==0)
dp[i][w]=0;
else if(wt[i-1]<=w)
dp[i][w]=Math.max(val[i-1]+dp[i-1][w-wt[i-6]],dp[i][w]);
else
dp[i][w]=dp[i-1][w];
}
}
return dp[n][w];
}
public static void main(String args[])
{
int val[]={60,100,120};
int wt[]={10,20,30};
int w=50;
int n=val.length;
System.out.print("Max value in KnapSack "+knapSack(w,wt,val,n));
}
}
import java.util.*;
class Job {
char id;
int deadline, profit;
Job(char id, int deadline, int profit) {
this.id = id;
this.deadline = deadline;
this.profit = profit;
}
}
class JobSequencing {
void printJobScheduling(Job arr[], int n) {
Arrays.sort(arr, (a, b) -> b.profit - a.profit);
boolean[] result = new boolean[n];
char[] job = new char[n];
for (int i = 0; i < n; i++) {
for (int j = Math.min(n, arr[i].deadline) - 1; j >= 0; j--) {
if (!result[j]) {
result[j] = true;
job[j] = arr[i].id;
break;
}
}
}
for (char jb : job) {
if (jb != '\u0000')
System.out.print(jb + " ");
}
}
public static void main(String args[]) {
Job arr[] = {
new Job('a', 2, 100),
new Job('b', 1, 19),
new Job('c', 2, 27),
new Job('a', 1, 25),
new Job('d', 2, 15)
};
int n = arr.length;
System.out.println("Following is the maximum profit sequence of jobs: ");
JobSequencing jobSequencing = new JobSequencing();
jobSequencing.printJobScheduling(arr, n);
}
}
shortest path/dijkstra
import java.util.*;
import java.lang.*;
import java.io.*;
class ShortestPath{
static final int V=9;
int minDistance(int dist[],Boolean sptSet[]){
int min=Integer.MAX_VALUE,min_index=-1;
for(int v=0;v<V;v++)
if(sptSet[v]==false && dist[v]<=min)
{
min=dist[v];
min_index=v;
}
return min_index;
}
void printSolution(int dist[],int n)
{
System.out.println("Vertex distance from source: ");
for(int i=0;i<V;i++)
{
System.out.println(i+" "+dist[i]);
}
}
void dijkstra(int graph[][],int src)
{
int dist[]=new int[V];
Boolean sptSet[]=new Boolean[V];
for(int i=0;i<V;i++)
{
dist[i]=Integer.MAX_VALUE;
sptSet[i]=false;
}
dist[src]=0;
for(int count=0;count<V-1;count++)
{
int u=minDistance(dist,sptSet);
sptSet[u]=true;
for(int v=0;v<V;v++)
{
if(!sptSet[v] && graph[u][v]!=0 && dist[u]!=Integer.MAX_VALUE && dist[u]+graph[u][v]<dist[v])
dist[v]=dist[u]+graph[u][v];
}
}
printSolution(dist,V);
}
public static void main(String args[])
{
int graph[][]=new int[][]{{0,4,0,0,0,0,0,8,0},
{4,0,8,0,0,0,0,11,0},
{0,8,0,7,0,4,0,0,2},
{0,0,7,0,9,14,0,0,0},
{0,0,0,9,0,10,0,0,0},
{0,0,4,14,10,0,2,0,0},
{0,0,0,0,0,2,0,1,6},
{8,11,0,0,0,0,1,0,7},
{0,0,2,0,0,0,6,7,0}};
ShortestPath t=new ShortestPath();
t.dijkstra(graph,0);
}
}
public class NQueenProblem{
final int N=4;
void printSolution(int board[][])
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
System.out.println(" "+board[i][j]+" ");
System.out.println();
}
}
boolean isSafe(int[][] board,int row,int col)
{
int i,j;
for(i=0;i<col;i++)
if(board[row][i]==1)
return false;
for(i=row,j=col;i>=0&&j>=0;i--,j--)
if(board[i][j]==1)
return false;
for(i=row,j=col;i<N && j>=0;i++,j--)
if(board[i][j]==1)
return false;
return true;
}
boolean solveNQUtil(int board[][],int col)
{
if(col>=N)
return true;
for(int i=0;i<N;i++){
if(isSafe(board,i,col))
{
board[i][col]=1;
if(solveNQUtil(board,col+1)==true)
return true;
board[i][col]=0;
}
}
return false;
}
boolean solveNQ()
{
int board[][]={{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}};
if(solveNQUtil(board,0)==false){
System.out.println("Solution does not exist");
return false;
}
printSolution(board);
return true;
}
public static void main(String args[])
{
NQueenProblem Queen=new NQueenProblem();
Queen.solveNQ();
}
}
sum of subsets
import java.util.ArrayList;
import java.util.List;
public class SubSetSum{
public static void findSubSetSum(int[] nums,int index,int currentSum,List<Integer> result)
{
if(index==nums.length){
result.add(currentSum);
return;
}
findSubSetSum(nums,index+1,currentSum+nums[index],result);
findSubSetSum(nums,index+1,currentSum,result);
}
public static List<Integer> subsetSums(int[] nums)
{
List<Integer> result=new ArrayList<>();
findSubSetSum(nums,0,0,result);
return result;
}
public static void main(String args[])
{
int[] nums={1,2,3};
List<Integer> sums=subsetSums(nums);
System.out.println("Subset sums: "+sums);
}
}
Bellman ford single source shortest path
import java.util.Arrays;
class Bellman
{
public static int[] function(int V, int[][] edges, int src)
{
int[] dist = new int[V];
Arrays.fill(dist, (int)1e8);
dist[src]=0;
for(int i=0;i<V;i++)
{
for(int[] edge: edges)
{
int u=edge[0];
int v=edge[1];
int wt=edge[2];
if(dist[u]!=1e8 && dist[u]+wt<dist[v])
{
if(i==V)
{
return new int[]{-1};
}
dist[v]=dist[u]+wt;
}
}
}
return dist;
}
public static void main(String args[])
{
int V=5;
int src=0;
int[][] edges=new int[][]{
{1,3,2},
{4,3,-1},
{2,4,1},
{1,2,1},
{0,1,5}
};
int[] res = function(V, edges,src);
for(int dist:res)
{
System.out.println(dist+” “);
}
}
}
all pairs shortest path
import java.util.Arrays;
public class AllPairsShortestPath {
final static int INF = 99999; // Represents “infinity” for unreachable paths
public static void floydWarshall(int[][] graph) {
int V = graph.length; // Number of vertices
int[][] dist = new int[V][V];
for (int i = 0; i < V; i++) {
dist[i] = Arrays.copyOf(graph[i], V);
}
for (int k = 0; k < V; k++) {
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
printSolution(dist);
}
public static void printSolution(int[][] dist) {
int V = dist.length;
System.out.println(“Shortest distances between every pair of vertices:”);
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][j] == INF) {
System.out.print(“INF “);
} else {
System.out.print(dist[i][j] + ” “);
}
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] graph = {
{0, 3, INF, INF},
{INF, 0, 1, INF},
{INF, INF, 0, 7},
{6, INF, INF, 0}
};
floydWarshall(graph);
}
}
travelling sales person
import java.util.*;
public class TravellingSalesperson {
final static int INF = Integer.MAX_VALUE;
public static int tsp(int[][] graph, int pos, int visited, int[][] dp) {
int n = graph.length;
if (visited == (1 << n) – 1) { // All cities visited
return graph[pos][0]; // Return to starting city
}
if (dp[pos][visited] != -1) { // If already computed
return dp[pos][visited];
}
int minCost = INF;
for (int city = 0; city < n; city++) {
if ((visited & (1 << city)) == 0) { // If city not visited
int cost = graph[pos][city] + tsp(graph, city, visited | (1 << city), dp);
minCost = Math.min(minCost, cost);
}
}
dp[pos][visited] = minCost;
return minCost;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(“Enter number of cities: “);
int n = scanner.nextInt();
int[][] graph = new int[n][n];
System.out.println(“Enter adjacency matrix (distances between cities):”);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
graph[i][j] = scanner.nextInt();
}
}
int[][] dp = new int[n][1 << n];
for (int i = 0; i < n; i++) {
Arrays.fill(dp[i], -1);
}
System.out.println(“Minimum distance to travel all cities: ” +
tsp(graph, 0, 1, dp)); // Start from city 0
}
}