Java-例题篇-简单003

本文介绍了三种实用的数组操作算法:寻找数组中仅出现一次的两个数、计算连续子数组的最大和及查找数组中两数之和等于给定值的下标。通过具体的Java代码实现,深入解析了每种算法的工作原理。
1.求一个数组中两个只出现一次的数
public static void fun(int[] arr) {
        int xor = 0,xor1 = 0,xor2 = 0,pos = 0;
        for(int i = 0;i < arr.length;i++){
            xor = xor ^ arr[i];
        }
        for (int i = 0; i < 32; i++) {
            if (1 == ((xor >> i) & 1)) {
                pos = i;
                break;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            if (1 == ((arr[i] >> pos) & 1)) {
                xor1 = xor1 ^ arr[i];
            }
            else {
                xor2 = xor2 ^ arr[i];
            }
        }
        System.out.println(xor1 + "  " + xor2);
    }
    public static void main(String[] args) {
        //int[] arr = {1,2,1,4,2,5};
        int[] arr = {1,4,2,5,2,1,6,5};
        fun(arr);
    }
2.求连续子数组的最大和
 public static int fun4(int[] arr) {
        int max = 0x80000000;
        int sum = 0;
        for(int i = 0;i < arr.length;i++){
            sum = sum + arr[i];
            if(sum < arr[i]){
                sum = arr[i];
            }
            if(sum > max){
                max = sum;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        //int[] arr = {10,9,-100,8,6};
        //int[] arr = {1,2,-10,8,9,17};
        int[] arr = {1,-2,3,10,-4,7,2,-5};
        //int[] arr = {1,-2,1,-2,6};
        int a = fun4(arr);
        System.out.println(a);
    }
3.输入一个数字,在数组中找到和为这个数字的两个数
public static int[] fun5(int[] arr,int key) {
        int[] arr2 = {-1,-1};
        int l = 0,h = arr.length-1;
        for(int i = 0;i < h;i++){
            if(arr[l] + arr[h] < key){
                l++;
            }
            if(arr[l] + arr[h] > key){
                h--;
            }
            if(arr[l] + arr[h] == key){
                arr2[0] = l;
                arr2[1] = h;
            }
        }
    return arr2;
    }
    public static void main(String[] args) {
        //int[] arr = {3,5,7,10};
        int[] arr = {4,6,7,8,10};
        Scanner scanner = new Scanner(System.in);
        int key = scanner.nextInt();
        int[] arr2 = fun5(arr,key);
        System.out.println(arr2[0] + "  " + arr2[1]);
        System.out.println(Arrays.toString(arr2));
    }
实验题目 编写一个类实现银行帐户的概念,包括的属性有“帐号”、“储户姓名”、“地址”、“存款余额”,包括的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”等。 实验要求 改写上面的类,增加一个类的静态属性“最小余额”和一个用来修改这个最小余额属性的方法。 改写上面的类,增加一个类的静态属性“活期利率”和封装这个属性的相应方法。 程序模块 实验后的结果验证 总结体会 通过此次实验,我初步掌握了编写一个类的概念,更进一步的熟悉了static等等与之用法相类似的语法类,增强了自己学好JAVA的信心。进一步掌握静态对象和非静态对象的区别与联系。 静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。 非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。 静态对象和非静态对象都是对象,是对象都是要实例化的。不同之处就是2者的数据表现和存储方式不一样。 静态的好处: 引用方便。对于公用类型的变量,直接用 类名.静态方法名 或者 类名.静态变量名就可引用并且直接可以修改其属性值,不用getter和setter方法。 保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。 有效减少多余的浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值