LeetCode数组(二)

1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/two-sum
LeetCode数组(二)_第1张图片

 思路:暴力法:遍历数组用每个数逐个和target做减法,用得到的值与当前数后面的数作比较,如果相等将二者下标存入新数组即可。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int index[] = new int[2];
        for(int i=0;i

 2.

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

思路:遍历数组,比较前后两个数字,如果相等则计数加1,若计数超过数组元素总数的 25%,则退出循环返回当前值。

class Solution {
    public int findSpecialInteger(int[] arr) {
        int count = 0;
        int i;
        for(i=0;iarr.length*0.25){
                return arr[i];
            }
        }
        return count;
    }
}

3.数组nums包含从0n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

LeetCode数组(二)_第2张图片

思路:要求在o(n)时间内完成,我们当然不能嵌套循环遍历查找,已知是0~n的所有数字中缺失了一个,那我们先把0~n的和求出再减去给出数组的所有元素和,返回两者之差就是结果。

class Solution {
    public int missingNumber(int[] nums) {
        int sum = 0;
        int sum1 = 0;
        for(int i=0;i <= nums.length;i++){
            sum+=i;
        }
        for(int j=0;j

4.给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

LeetCode数组(二)_第3张图片

思路:类似于求众数,最简单的方法是,当我们对一个数组进行排序,拍好后由于出现最多的数超过了n/2,那么出现次数最多的数一定再最中间。我们只需排序好后直接输出中间位置的数即可。

class Solution {
    public int majorityElement(int[] nums) {
        //Arrays.sort(nums);//O(n)级别
        int j;
        int e;
        for(int i=1;i0&&nums[j-1]>e;j--){
                nums[j]=nums[j-1];
            }
            nums[j]=e;
        }
        return nums[(nums.length-1)/2];
    }
}

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java,Java习题)