数组逆置
public class InverseIntArray{
public void swap(int[] array, int a, int b){
int t = array[a];
array[a] = array[b];
array[b] = t;
}
public void printArray(int[] array){
for(int i:array){
System.out.print(i+"");
}
System.out.println();
}
public void inverse01(int[] array){
if(array==null||array.length<=1){
return;
}
for(int i=0,j=array.length-1; i<j; i++,j--){
swap(array, i, j);
}
}
public void inverse02(int[] array){
if(array==null||array.length<=1){
return;
}
int n=array.length;
int half=n/2;
for(int i=0;i<half;i++){
swap(array;i;n-1-i);
}
}
}
public class InverseArray<T> {
public void swap(T[] array, int a, int b){
T t = array[a];
array[a] = array[b];
array[b] = t;
}
public void printArray(T[] array){
for(T i:array){
System.out.print(i.toString()+"");
}
System.out.println();
}
public void inverse(T[] array){
if(array==null||array.length<=1){
return;
}
for(int i=0,j=array.length-1; i<j; i++,j--){
swap(array, i, j);
}
}
}
public class Person{
private int id;
private String name;
public int getId() {
return id;
}
public void setId() {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Person [id="+ id + ",name=" + name + "]";
}
}
public class TestInverse {
@Test
public void testPerson(){
Person[] array=new Person[6];
for(int i=0;i<6;i++){
array[i]=new Person(i, "name" + i);
}
InverseArray<Person> ia=new InverseArray<Person>();
ia.printArray(array);
ia.inverse(array);
ia.printArray(array);
}
@Test
public void testInteger(){
Integer[] array=new Integer[7];
Randon ra = new Random();
for(int i=0;i<7;i++){
array[i]=ra.nextInt(10);
}
InverseArray<Integer> ia=new InverseArray<Integer>();
ia.printArray(array);
ia.inverse(array);
ia.printArray(array);
}
}
数组旋转
public class RotateArray {
public void swap(T[] array, int a, int b){
T t = array[a];
array[a] = array[b];
array[b] = t;
}
public void printArray(T[] array){
for(T i:array){
System.out.print(i.toString()+"");
}
System.out.println();
}
public void inverse(T[] array, int start, int end){
if(array==null||array.length<=1){
return;
}
for(int i=start,j=end; i<j; i++,j--){
swap(array, i, j);
}
}
public voie rotate(int[] nums, int k){
if(k==0){
return;
}
int n=nums.length;
if(k>n){
k=k%n;
}
reverse(nums,0,n-1-k);
reverse(nums,n-k,n-1);
reverse(nums,0,n-1);
}
@Test
public void test(){
int[] nums={1,2,3,4,5,6,7,8,9,10};
printArray(nums);
rotate(nums,4);
printArray(nums);
}
}
和为s的两个数
public class TwoSum{
public void printResult(int a, int b){
System.out.println("["+ a + "," + b + "}");
}
public void twoSum01(int[] array,int s){
int n = array.length;
for(int i=0; i<n-1; i++){
for(int j=i+1; j<n; j++){
if(array[i]+array[j]==s){
printResult(array[i],array[j]);
break;
}
}
}
}
@Test
public void test(){
in[] array={1,3,4,5,8,9,12};
int s=13;
twoSum01(array, s);
}
public void twosum02(in[] array,int s){
int i=0;
int j=array.length-1;
int sum=0;
while(i<j){
sum=array[i]+array[j];
if(sum==s){
printResult(array[i],array[j]);
i++;
j--;
}else if(sum<s){
i++;
}else{
j--;
}
}
}
}
public void twoSum03(int[] array,int s){
int n=array.length;
for(int i=0; i<n-1; i++){
int another=s-array[i];
if(Arrays.binarySearch(array,i+1,n-1,another)>=i+1){
printResult(array[i], another);
}
}
}
和为s的连续正整数序列
public class SeriesSum {
public void printResult(int start, int end){
for(int k=start; k<=end; k++){
System.out.print(k+" ");
}
System.out.println();
}
public void addSum(int s){
int start=1,end=2;
int sum=start+end;
int half=(s+1)/2;
while(start<half){
if(sum=s){
printResult(start, end);
sum=sum-start;
start++;
end++;
sum+=end;
}else if(sum<s){
end++;
sum+=end;
}else{
sum=sum-start;
start++;
}
}
}
@Test
public void test(){
addSum(21);
System.out.println();
addSum(15);
}
}
删除数组中的重复元素
class RemoveDuplicates{
public int remove01(int[] nums){
if(nums==null||nums.length==0){
return 0;
}else if(nums.length==1){
return 1;
}else{
int end=nums.length-1;
ArrayList<Integer> list=new ArrayList<Integer>();
int i=0;
while(i<=end){
if(i==end){
list.add(nums[i]);
i++;
}else{
int j=i+1;
if(nums[i]==nums[j]){
while(j<=end&&nums[i]==nums[j]){
j++;
}
}
list.add(nums[i]);
i=j;
}
}
for(i=0;i<list.size();i++){
nums[i]=list.get(i);
}
return list.size();
}
}
public int remove02(int[] nums){
if(nums==null||nums.length==0){
return 0;
}else if(nums.length==1){
return 1;
}else{
int end=nums.length-1;
for(int i=0;i<=end;i++){
if(i<end){
int j=i+1;
if(nums[i]==nums[j]){
while(j<=end&&nums[i]==nums[j]){
j++;
}
}
System.arraycopy(nums, j, nums, i+1, end-j+1);
end-=j-i-1;
}
}
return end+1;
}
}
public void myArrayCopy(int[] array1, int s1, int[] array2, int s2,int length){
int[] array=new int[len];
for(int i=0; i<len; i++){
array[i]=array1[s1+i];
}
for(int i=0; i<len; i++){
array2[s2+i]=array[i];
}
}
public void printNewArray(int[] array,int len){
for(int i=0;i<len;i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
@Test
public void test01{
int[] nums={1,2,2,2,3,4,5,6,6,7,7,7,8};
int len=remove01(nums);
System.out.println(len);
printNewArray(nums, len);
}
@Test
public void test02{
int[] nums={1,2,2,2,3,4,5,6,6,7,7,7,8};
int len=remove02(nums);
System.out.println(len);
printNewArray(nums, len);
}
public int remove02(int[] nums){
if(nums==null||nums.length==0){
return 0;
}else if(nums.length==1){
return 1;
}else{
int temp=nums[0];
int len=1;
for(int i=1; i<nums.length;i++){
if(temp==nums[i]){
continue;
}else{
temp=nums[i];
nums[len]=nums[i];
len++;
}
return len;
}
}
}
}