Java教程

简单算法练习3

本文主要是介绍简单算法练习3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

11. 二进制中1的个数

描述

输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。

分析

使用一个int flag=1,并且把这个1不断左移然后和参数的int n进行与运算比较

public class Solution {
    public static int NumberOf1(int n) {
        int count=0,flag=1;
        while(flag!=0)
        {
            if((flag&n)!=0)
                count++;
            flag=flag<<1;
        }
        return count;
}
}

12. 数值的整数次方

描述

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。

分析

注意考虑exponent为负数的情况

public class Solution {
    public double Power(double base, int exponent) {
        double k = 1;
        if(exponent >= 0)
        {
            for (int i=0; i<exponent; i++)
            {
                k = k * base;
            }
        }
        else
        {
            for (int i=0; i<-exponent; i++)
            {
                k = k * base;
            }
            k = 1.0/k;
        }
        return k;
  }
}

13. 调整数组顺序使奇数位于偶数前面

描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

分析

先插入奇数,再根据奇数的位置在其后插入偶数

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] reOrderArray (int[] array) {
        int[] array2 = new int[array.length];
        int a = 0;
        int b = 0;
        for (int i=0; i<array.length; i++)
        {
            if (array[i] % 2 != 0)
            {
                array2[a] = array[i];
                a++;
            }
        }
        for (int i=0; i<array.length; i++)
        {
            if (array[i] % 2 == 0)
            {
                array2[a+b] = array[i];
                b++;
            }
        }
        return array2;// write code here
    }
}

14. 链表中倒数最后k个结点

描述

输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。

如果该链表长度小于k,请返回一个长度为 0 的链表。

分析

使用两个指针,并且注意题目要求

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode FindKthToTail (ListNode pHead, int k) {
        ListNode a = pHead;
        ListNode b = pHead;
        int c = 0;
        if (a == null)
            return null;
        for (int i=0; i<k; i++)
        {
            a = a.next;
            c++;
            if (a == null & k > c)
                return null;
        }
        while (a != null)
        {
            a = a.next;
            b = b.next;
        }
        return b;
// write code here
    }
}

15. 反转链表 

描述

输入一个链表,反转链表后,输出新链表的表头。

分析

使用头插法。

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode pre=null;
        ListNode cur=head;
        while(cur!=null){
            ListNode tmp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=tmp;
        }
        return pre;
    }
}

 

 

 

这篇关于简单算法练习3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!