/*
* 1.Given an array of integers, every element appears twice except for one. Find that single one.
* (Note:Your algorithm should have a linear runtime complexity.
* Could you implement it without using extra memory?)
* 2.Given a string, find the first non-repeating character in it
* and return it's index. If it doesn't exist, return -1.
* (Note: You may assume the string contain only lowercase letters.)
* 3.Given an array of integers, return indices of the two numbers such that they add up to a specific target.
* You may assume that each input would have exactly one solution, and you may not use the same element twice.
*/
package algorithm;
public class Day5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Solution sl=new Solution();
int arr[]={1,3,4,4,3,5,1};
sl.singleNum(arr);
sl.firstUni("leecode lee code 0 ,");
int arr1[]={2,4,6,7,1,0};
sl.twoSum(arr1, 10);
}
}
class Solution
{
public void singleNum(int arr[])
{
int result=arr[0];
for(int i=1;i<arr.length;i++)
{
result ^=arr[i];
}
System.out.println(result);
}
public void firstUni(String s)
{
int arr[]=new int[255];
for(int i=0;i<s.length();i++)
{
arr[s.charAt(i)]++;
}
for(int j=0;j<s.length();j++)
{
if(arr[s.charAt(j)]==1)
{
System.out.println(j);
break;
}
if(j==s.length()-1)
{
System.out.println(-1);
}
}
}
public void twoSum(int arr[],int target)
{
for (int i=0;i<arr.length;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]+arr[j]==target)
{
System.out.println(i+" "+j);
break;
}
}
}
}
}