dkholia
BAN USERI donot know whaat you answered but for my solution the complexity is n2 + logn
here is the solution
public class MinimumDiffPrimeNumbers {
public static void main(String[] args) {
int[] numbers = {101,-113,1,45,78,-2,-3,7};
new MinimumDiffPrimeNumbers().findPrimes(numbers);
}
private int[] findPrimes(int [] numbers) {
int [] returnArray = new int[2];
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
for(int i=0;i<numbers.length;i++){
if(isPrime(numbers[i]))
map.put(numbers[i], numbers[i]);
}
returnArray[0]= map.firstKey().intValue();
returnArray[1]= map.lastKey().intValue();
return returnArray;
}
private boolean isPrime(int n){
if(n<0)
n = 0 - n; //just convert n to positive for simplicity
for(int i = 2;i<n/2;i++){
if(n%i==0)
return false;
}
return true;
}
}
public class LongestPath {
private String longestPath = null;
public static void main(String[] args) {
LongestPath instance = new LongestPath();
TreeNode rootNode = instance.createTree();
System.out.println("Longest path is : " + instance.getLongestPath(rootNode));
}
private TreeNode createTree(){
TreeNode rootNode = new TreeNode(0);
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
TreeNode node8 = new TreeNode(8);
TreeNode node9 = new TreeNode(9);
TreeNode node10 = new TreeNode(10);
TreeNode node11 = new TreeNode(11);
TreeNode node12 = new TreeNode(12);
rootNode.setLeft(node1);
rootNode.setRight(node2);
node1.setLeft(node3);
node1.setRight(node4);
node3.setLeft(node5);
node3.setRight(node6);
node6.setRight(node7);
node5.setLeft(node8);
node2.setLeft(node9);
node9.setLeft(node10);
node10.setLeft(node11);
//node11.setRight(node12);
return rootNode;
}
private String getLongestPath(TreeNode rootNode){
if(rootNode==null)
return null;
String path ="";
getPath(path, rootNode);
return longestPath;
}
private Integer getPath(String path, TreeNode node) {
path+="/"+node.value;
if(node.left==null && node.right==null){
String tempPath = longestPath;
if(longestPath!=null && longestPath.contains(","))
tempPath = longestPath.split(",")[0];
if(tempPath==null || tempPath.split("/").length<path.split("/").length)
longestPath = path;
else if(tempPath.split("/").length == path.split("/").length)
longestPath+=","+path;
return 1;
}
if(node.left==null && node.right!=null)
return 1+ getPath(path, node.right);
else if( node.left!=null && node.right==null)
return 1+ getPath(path, node.left);
else
return 1+ Math.max(getPath(path,node.left), getPath(path, node.right) );
}
}
class TreeNode {
TreeNode left;
TreeNode right;
Integer value;
public TreeNode(Integer value) {
left = null;
right= null;
this.value = value;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public void setRight(TreeNode right) {
this.right = right;
}
@Override
public String toString() {
return "TreeNode [left=" + left + ", right=" + right + ", value=" + value + "]";
}
}
All the solutions are too lengthy .. I have tested my solution and it works every time.. Comments are appreciated
private int[][] getRandomMatrix(int size){
int [] [] matrix = new int[size][size];
int random;
for (int i=0;i<size;i++){
for ( int j=0 ;j<size;j++){
random = getRandomNumber();
matrix[i][j]= random;
if((((i - 1) >= 0) && ((i-2)>=0)) ){
if( (matrix[i][j] == matrix[i-1][j] && matrix[i][j]== matrix[i-2][j] ) ){
random = getRandomNumber();
j--;
}
}
if(((j-1)>=0) && ((j-2)>=0)){
if((matrix[i][j]== matrix[i][j-1] && matrix[i][j]== matrix[i][j-2])){
random = getRandomNumber();
j--;
}
}
}
}
return matrix;
}
private int getRandomNumber() {
return new Random().nextInt(4)+1;
}
public void getDiagonalString() {
int[][] inp = new int[][] {
{1 ,2 ,3 ,4 ,5,100},
{6 ,7 ,8 ,9 ,10,200},
{11,12,13,14,15,300},
{16,17,18,19,20,400},
{21,22,23,24,25,500},
{26,27,28,29,30,600}};
System.out.println(inp[inp.length-1][0]);
int count;
int tempi ;
for( int i= inp.length-2; i>=0;i--){
count= inp.length-i;
tempi= i;
for( int j=0;j<=count;j++){
if(i>inp.length-1){
i =tempi;
break;
}
System.out.print(inp[i++][j] + " ");
}
i = tempi;
System.out.println();
}
int tempj;
for(int j=1;j<=inp[0].length-1;j++){
count= inp.length-j;
tempj =j;
for(int i = 0 ; i <=count;i++){
System.out.print(inp[i][j]+ " ");
if(j==inp[0].length-1)
break;
j++;
}
j = tempj;
System.out.println();
}
}
public Integer [] getMultipliedArray(Integer[] input) {
Integer multiplication = 1;
Integer[] returnArray = new Integer[input.length];
int zeroIndex =-1;
boolean morethanOneZero = false;
for (int i = 0; i < input.length; i++) {
if(input[i]!=0)
multiplication*=input[i];
else{
if(zeroIndex <0)
zeroIndex=i;
else {
morethanOneZero = true;
}
}
}
for (int i = 0; i < input.length; i++) {
if(zeroIndex >-1){
if(i==zeroIndex && !morethanOneZero){
returnArray[i]=multiplication;
}else{
returnArray[i]=0;
}
}
else{
returnArray[i] = multiplication / input[i];
}
}
return returnArray;
}
String allChars = "abcdefghijklmnopqrstuvwxyz";
public Integer calculateSum(Character [] chars){
Integer sum = 0;
int charIndex = 0;
for(int i =0;i<chars.length;i++){
charIndex = allChars.indexOf(chars[i].toString().toLowerCase())+1;
if( charIndex == 1){
sum += 1;
}else{
sum+= ((charIndex-1) * (charIndex-1)) + charIndex;
}
}
return sum;
}
RepRileyAllen, Analyst at British Telecom
I enjoy spending my spare time outside and engaging in activities such as hiking, swimming, biking, and jogging. Explore new ...
Sorry I got the question wrong .. I thought the two numbers needs to be returned.. This solution returns the minimum difference
- dkholia January 22, 2017