leetcode_50_Pow(x, n) / 1122._数组的相对排序

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000
示例 2:

输入: 2.10000, 3
输出: 9.26100
示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

class Solution {
    //迭代
    public double myPow(double x, int n) {
        double res = 1.0;
        for (int i = n; i != 0; i /= 2) {
            if (i % 2 != 0) {
                res *= x;
            }
            x *= x;
        }
        return n > 0 ? res : 1.0 / res;
    }
}

给你两个数组,arr1 和 arr2,

arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

 

示例:

输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]
 

提示:

arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每个元素 arr2[i] 都出现在 arr1 中

class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] nums = new int[1001]; //统计元素个数
        int[] res = new int[arr1.length];
        int index = 0; //索引
        int max = 0; //存放最大值

        for (int i : arr1) { //遍历arr1
            nums[i]++; //统计i的个数
            max = Math.max(max, i); //每次比较出较大值
        }

        for (int i : arr2) { //遍历arr2,将arr1中元素往res中存放
            while (nums[i] > 0) {
                res[index++] = i;
                nums[i]--;
            }
        }

        for (int i = 0; i <= max; i++) { //将arr1中剩余的元素存放到res中
            while (nums[i] > 0) {
                res[index++] = i;
                nums[i]--;
            }
        }

        return res;
    }
}
原文地址:https://www.cnblogs.com/rabbitli/p/13975247.html