剑指offer(11-15)

2020-09-18  本文已影响0人  yaco

JZ11

问题描述:

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

思路:

代码:

public class Solution {
    public int NumberOf1(int n) {
        int res = 0;
        for(int i = 0; i < 32; i++) {
            if((n & 1) == 1) {
                res++;
            }
            n = n >> 1;
        }
        return res;
    }
}

JZ12

问题描述:

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

保证base和exponent不同时为0

思路:

代码:

public class Solution {
    public double Power(double base, int exponent) {
        if(base == 0) return 0;
        if(exponent == 0) return 1;
        boolean f = exponent > 0 ? true : false;
        exponent = Math.abs(exponent);
        double res = 1;
        while(exponent-- > 0) {
            res *= base;
        }
        return f ? res : 1 / res;
    }
}

JZ13

问题描述:

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

思路一:

思路二:

代码:

// 思路一:
public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        int[] t = new int[n];
        int index = 0;
        for(int i = 0; i < n; i++) {
            if((array[i] & 1) == 1) {
                t[index++] = array[i];
            }
        }
        for(int i = 0; i < n; i++) {
            if((array[i] & 1) == 0) {
                t[index++] = array[i];
            }
        }
        for(int i = 0; i < n; i++) {
            array[i] = t[i];
        }
    }
}

// 思路二:
public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        for(int i = n - 1; i > 0; i--) {
            for(int j = 0; j < i; j++) {
                if((array[j] & 1) == 0 && ((array[j + 1] & 1) == 1)) {
                    swap(array, j, j + 1);
                }
            }
        }
    }
    
    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

JZ14

问题描述:

输入一个链表,输出该链表中倒数第k个结点。

思路一:

代码:

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        ListNode t = head;
        while(k-- > 0) {
            if(t == null) return null;
            t = t.next;
        }
        ListNode r = head;
        while(t != null) {
            r = r.next;
            t = t.next;
        }
        return r;
    }
}

JZ15

问题描述:

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

思路一:

代码:

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode pre = null, next = null;
        while(head != null) {
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}
上一篇下一篇

猜你喜欢

热点阅读