import java.util.Arrays;
/**
* Created by Arun on 8/11/14.
*/
public class ClosestArray {
private static int[] getClosest(int num, int element, int arr[]){
int elementIndex = -1;
int closeArray [] = new int[num];
for(int i=0;i<arr.length;i++) {
if(arr[i]==element){
elementIndex = i;
}
}
for(int i=0, j=elementIndex-1, k=elementIndex+1;i<num;i++){
int diff1 = element-arr[j];
int diff2 = arr[k]-element;
if(diff1<diff2){
closeArray[i]=arr[j];
j--;
}
else if(diff1>diff2) {
closeArray[i]=arr[k];
k++;
}
else{
closeArray[i]=arr[j];
if(i<num){
i++;
closeArray[i]=arr[k];
j--;
k++;
}
else {
break;
}
}
}
return closeArray;
}
public static void main(String args[]) {
int arr[] = {12, 16, 22, 31, 35, 39, 42, 45, 48, 50, 53, 55, 56};
getClosest(4, 35, arr);
}
}
Monday, August 11, 2014
Given a sorted array arr[] and a value X, find the k closest elements to X in arr[]. Examples: Input: K = 4, X = 35 arr[] = {12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56} Output: 30 39 42 45
Saturday, August 9, 2014
Given an array of integers. This array denotes ‘our’ own ascending order of the elements. So if the array is {2,3,1,4}, by mathematics we can say that 2<3<1<4. Given another array, sort this new array in ‘our’ ascending order.
Let’s say the new array is {1,2,4,3,5,4,9,2}, output will be {2,2,3,1,4,4,5,9}. Note that since 5 and 9 do not occur, they are sorted by actual ascending order at the end.
Let’s say the new array is {1,2,4,3,5,4,9,2}, output will be {2,2,3,1,4,4,5,9}. Note that since 5 and 9 do not occur, they are sorted by actual ascending order at the end.
import java.util.*;
/**
* Created by Arun on 8/9/14.
*/
public class CustomizedSort {
public static ArrayList<Integer> sort(int customSortList[], Integer arr[]){
Map<Integer, Integer> mp = new LinkedHashMap<Integer, Integer>();
for(int i=0;i<customSortList.length;i++) {
mp.put(customSortList[i], i);
}
System.out.println(mp);
List<Integer> a = Arrays.asList(arr);
Collections.sort(a);
arr = a.toArray(new Integer[arr.length]);
ArrayList<Integer> newArr = new ArrayList<Integer> (arr.length);
Iterator it = mp.entrySet().iterator();
while (it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
int key = (Integer)pairs.getKey();
for(int i=0;i<a.size();i++){
if(a.get(i)==key){
newArr.add(key);
}
}
}
for(int i=0;i<a.size();i++){
if (!newArr.contains(a.get(i))){
newArr.add(a.get(i));
}
}
return newArr;
}
public static void main(String args[]){
int customSortList[] = {2,3,1,4};
Integer arr [] = {1,2,4,3,5,4,9,2};
System.out.println(sort(customSortList, arr));
}
}
Given a text txt[0..n-1] and a pattern pat[0..m-1], write a function search(char pat[], char txt[]) that prints all occurrences of pat[] and its permutations (or anagrams) in txt[]. You may assume that n > m.E.g. : I/p : txt[] = “BACDGABCDA” pat[] = “ABCD”o/p :0,5,6
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Arun on 8/9/14.
*/
public class PatternMatching {
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static ArrayList<Integer> getPrimes() {
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i=0, j=0;j<26;i++){
if(isPrime(i)){
arr.add(i);
j++;
}
}
return arr;
}
private static ArrayList<Integer> matchPattern(String str, String pattern) {
ArrayList<Integer> a = getPrimes();
String alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Map<String, Integer> valMap = new HashMap<String, Integer>();
int patternProduct = 1;
for(int i=0;i<alphabets.length();i++) {
valMap.put(String.valueOf(alphabets.charAt(i)), a.get(i));
}
for(int i=0;i<pattern.length();i++) {
patternProduct = patternProduct * valMap.get(String.valueOf(pattern.charAt(i)));
}
for(int i=0;i<=str.length()-pattern.length();i++) {
int tempVal=1;
for(int j=i, k=0;k<pattern.length();k++,j++){
tempVal = tempVal * valMap.get(String.valueOf(str.charAt(j)));
}
if(tempVal==patternProduct) {
System.out.println(i);
}
}
return null;
}
public static void main(String args[]) {
matchPattern("BACDGABCDABCD", "ABCD");
}
}
Given an array of integers. Segregate all the non-zero numbers at the beginning. Print the number of non-zero integers and the minimum number of swaps required for these operations.Eg. : I/p : 1, 0, 0, -6, 2, 0o/p : Number of non-zero integers : 3
import java.util.ArrayList;
/**
* Created by Arun on 8/9/14.
*/
public class ArrayNonZero {
public static void main(String args[]) {
int arr [] = {1, 0, 0, -6, 2, 0};
ArrayList<Integer> nonZero = new ArrayList<Integer>();
ArrayList<Integer> zero = new ArrayList<Integer>();
int i=0;
//get the indexes of the zero and non zero elements
for(int val: arr) {
if(val!=0) {
nonZero.add(i);
}
else {
zero.add(i);
}
i++;
}
int newArr [] = new int[arr.length];
i=0;
//put the non-zero elements at the end and zero element at the beginning
for(int val: nonZero){
newArr[i]=arr[val];
i++;
}
for(int val: zero) {
newArr[i] = arr[val];
i++;
}
for(int val: newArr){
System.out.println(val);
}
}
}
Subscribe to:
Comments (Atom)