面试题 10.11. 峰与谷

这道面试题要求将整数数组按照峰(大于或等于相邻整数)与谷(小于或等于相邻整数)的交替顺序进行排序。通过遍历数组,根据奇偶位置判断并交换元素来实现。注意代码中的优化技巧,使用位运算提升判断奇偶位置的速度。
摘要由CSDN通过智能技术生成

面试题 10.11. 峰与谷 【中等题】【数组】

在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。

输入: [5, 3, 1, 2, 3]
输出: [5, 1, 3, 2, 3]

题目讲解

【历史重难点题目】

【思路】

  • 让我们假设“峰”在偶数位,“谷”在奇数位(倒过来也一样)
  • 那么遍历一遍数组,有以下两个情况:
  1. 如果i为峰的位置,则判断当前位置是否小于前一个位置(前一个为谷),若小于,则交换,大于则不处理。即: if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1])
  2. 如果i为谷的位置,则判断当前位置是否大于前一个位置(前一个为峰),若大于,则交换,大于则不处理。即: if(nums[i]>nums[i-1]) swap(nums[i],nums[i-1])

【代码】

public void wiggleSort(int[] nums) {
    for(int i = 1;i < nums.length; i++){
        if((i%2 == 0 && nums[i] < nums[i-1])||(i%2 != 0 && nums[i] > nums[i-1])){
            int temp = nums[i];
            nums[i] = nums[i-1];
            nums[i-1] = temp;
        }
    }
}

【备注】

  • 这里有一个加速的小技巧,判断奇偶的时候,如果用取余运算%速度会慢一点。这里用位运算的话速度会稍稍快一点。i&1==1即奇数,i&1==0即偶数。&是“与”操作。大家可以试一下两段代码的速度,的确是有差别的。
public void wiggleSort(int[] nums) {
    for(int i = 1;i < nums.length; i++){
        if(((i&1) == 0 && nums[i] < nums[i-1])||((i&1) == 1 && nums[i] > nums[i-1])){
            int temp = nums[i];
            nums[i] = nums[i-1];
            nums[i-1] = temp;
        }
    }
}

微信关注我,带你拿大厂offer

IP地址规划是将一个IP地址空间分配给不同的网络和子网以便有效地管理和使用IP地址。以下是一个可能的IP地址规划: 网络地址:10.11.0.0/16 子网掩码:255.255.0.0 1. 划分子网 根据需求划分子网,以下为划分示例: 子网1:10.11.1.0/24 子网2:10.11.2.0/24 子网3:10.11.3.0/24 子网4:10.11.4.0/24 子网5:10.11.5.0/24 2. 分配IP地址 根据子网的数量和主机数量,为每个子网分配IP地址范围。以下是一个示例: 子网1:10.11.1.1 ~ 10.11.1.254 子网2:10.11.2.1 ~ 10.11.2.254 子网3:10.11.3.1 ~ 10.11.3.254 子网4:10.11.4.1 ~ 10.11.4.254 子网5:10.11.5.1 ~ 10.11.5.254 3. 分配网关地址 为每个子网分配一个网关地址。网关地址通常是子网中的第一个IP地址。以下是一个示例: 子网1:10.11.1.1 子网2:10.11.2.1 子网3:10.11.3.1 子网4:10.11.4.1 子网5:10.11.5.1 4. 分配保留地址 为每个子网分配一些保留地址,以便用于特殊用途。以下是一个示例: 子网1:10.11.1.0(网络地址)、10.11.1.255(广播地址) 子网2:10.11.2.0(网络地址)、10.11.2.255(广播地址) 子网3:10.11.3.0(网络地址)、10.11.3.255(广播地址) 子网4:10.11.4.0(网络地址)、10.11.4.255(广播地址) 子网5:10.11.5.0(网络地址)、10.11.5.255(广播地址) 5. 总结 根据上述规划,我们可以总结出以下内容: 网络地址:10.11.0.0/16 子网掩码:255.255.0.0 子网1:10.11.1.0/24,IP地址范围:10.11.1.1 ~ 10.11.1.254,网关地址:10.11.1.1,保留地址:10.11.1.0、10.11.1.255 子网2:10.11.2.0/24,IP地址范围:10.11.2.1 ~ 10.11.2.254,网关地址:10.11.2.1,保留地址:10.11.2.0、10.11.2.255 子网3:10.11.3.0/24,IP地址范围:10.11.3.1 ~ 10.11.3.254,网关地址:10.11.3.1,保留地址:10.11.3.0、10.11.3.255 子网4:10.11.4.0/24,IP地址范围:10.11.4.1 ~ 10.11.4.254,网关地址:10.11.4.1,保留地址:10.11.4.0、10.11.4.255 子网5:10.11.5.0/24,IP地址范围:10.11.5.1 ~ 10.11.5.254,网关地址:10.11.5.1,保留地址:10.11.5.0、10.11.5.255
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值