今天开始读《编程之美》,第一个编程题就让自己深思,自己纸上编程能力太low了,
题目如下:写一个函数,返回函数数组所有数除于数组第一个数的结果。
我自己写了下:public int[] fun(int a[] , int n){
for(int i=0;i<n;i++){
//要考虑除数和数组数为o的情况
try{
a[i]=a[i]/a[0];
}catch(Exception e){
a[i]=0;
}
}
return a;
}
由此又学习了一个编程题:
请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩下一个。函数返回删除后数组中元素个数:
解答如下:
int fun(int a[] , int n){
int i,j,k;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]=a[j]){
--n;
//找到相同的数组元素就将数组前移,n-1
for(k=j;k<n;k++){
a[k]=a[k+1];
}
}
}
}
return n;
}
这个题现在想想可以直接用c++的set容器来做,insert()方法直接去除重复数,时间复杂度也还行。
我写下java的set使用方法,set容器初始化new HashSet(),具体后面有介绍:
int main(){
int a[] = {1,1,2,2,3,3,4,4};
int i=0;
Set<Integer> s = new HashSet<Integer>();
while(i<a.length){
s.add(a[i++]);//java中用add添加实例,c中则是insert()插入
}
Iterator it = s.iterator();//使用迭代器打印
while(it.hasNext){
System.out.println(it.next);
}
}
提一下:++n和n++的区别
单独语句没区别的..但是在内存中有变化,还有一点就是for(;;++n)是少执行一条循环,适用于判断句赋值情况
,比如int j = s.begin();讲位图就会明白。
n++ => n=n+1 就是开辟一个新的内存空间..用于存放n+1的数,然后销毁原来的内存空间
++n 在原来的内存空间上作操作~~ 所以是直接完成操作的~ 而n++是在该语句完成后数据才变化的!