LeetCode_747. 至少是其他数字两倍的最大数

题目:
在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
示例 1:
输入: nums = [3, 6, 1, 0]
输出: 1
解释: 6是最大的整数, 对于数组中的其他整数,
6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1
示例 2:
输入: nums = [1, 2, 3, 4]
输出: -1
解释: 4没有超过3的两倍大, 所以我们返回 -1.
难点:
第一个for循环之所以不用foreach代替,是因为在遍历的过程中发生了修改,而第二个for循环则可以用foreach来代替。
**注:**能用foreach遍历则必定能用for遍历,而用for遍历则不一定能用foreach遍历
代码实现:

class Solution {
    public int dominantIndex(int[] nums) {
        int len=nums.length;
        int max=0;
        if(len<=1){
            return 0;
        }
        for(int i=0;i<len;i++){
            if(nums[max]<nums[i]){
                max=i;
            }
        }
       /* for(int i=0;i<len;i++){
            if(nums[max]<nums[i]*2&&nums[max]!=nums[i])
                    return -1;
        } 
            */
        //改用foreach循环
        for(int i:nums){
            if(nums[max]<i*2&&nums[max]!=i)
            return -1;
        } 
        return max;
    }
}

foreach和for循环的区别
for循环
for循环,通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素。在处理比较复杂的处理的时候较为方便。
foreach循环
foreach,从头到尾,对于集合中的对象遍历。适用于简单的遍历。foreach使用的时候,会锁定集合的对象,期间不能进行修改。
使用的选择
foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable。在运行的时候效率低于for循环。当然了,在处理不确定循环次数的循环,或者循环次数需要计算的情况下。使用foreach比较方便。而且foreach的代码经过编译系统的代码优化后,和for循环的循环类似。
可以说,foreach语句是for语句的特殊简化版本,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。在复杂的循环设计时,还是应该使用for循环更加的灵活。
能用foreach遍历则必定能用for遍历,而用for遍历则不一定能用foreach遍历。

猜你喜欢

转载自blog.csdn.net/weixin_44561640/article/details/89071014
今日推荐