今天,对曾经的体型进行了琢磨,发现一些新的用法与解法,比如对Java中的一些包,入import java.util.Set ; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.Arrays;
import java.util.map; import java.util.HashMap等。偶尔发现这些数据结构,对数组的调用,栈,Hash队列,哈希图,数组 等的使用,和数组中索引与索引位置中的数字的关系,处理的很紧密。
举个例子:从排序数组中删除重复项,在不产生新的数组的条件下。遍历数组,比较前一个与后一个是否数值相同,找到不同的 那个往前放置,知道放完为止,即使该数组所应有的长度。代码如下:
package com.imooc;
public class Solution {
public int removeDuplicates(int[] nums) {
int j=1;
for(int i=1;i<nums.length;i++)
{
if(nums[i]!=nums[i-1])
{
nums[j]=nums[i];
j++;
}
}
return j;
}
public static void main(String[]args){
int []arr=new int[]{1,2,2,3,3,3,100,100};
Solution solve = new Solution();
int length = solve.removeDuplicates(arr);
for(int i=0;i<length;i++)
{
System.out.print(arr[i]+" ");
}
}
}
而对于从非排序数组中删除重复项,则用到了HashSet与Set。遍历数组,用set.contains()与set.add()去增加 if 的设置条件,然后将set中的数值读出到原来的数组中,用到 Iterator 去读出 set 队列中的数值,并用Arrays.sort()进行排序,就排序set队列长度下的数值。
package com.imooc;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Arrays;
public class Solution{
public int removeDuplicates(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
int len = 0;
for(int i=0;i<nums.length;i++){
if(set.contains(nums[i])!=true){
set.add(nums[i]);
len++;
}else{
continue;
}
}
Iterator<Integer> it = set.iterator();
int j=0;
while(it.hasNext())
{
nums[j]=it.next();
j++;
}
Arrays.sort(nums,0,j);
for(int i=0;i<j;i++){
System.out.println(nums[i]);
}
return j;
}
public static void main(String[]args){
int []nums = new int[]{2,1,1,2,3,4,5,4,6};
Solution solve = new Solution();
int length = solve.removeDuplicates(nums);
}
}