- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Python 中我们做这样的 for 循环:
for i in range(len(nums))
在Java中:我们有:
for (int i = 0; i < nums.length; i++)
这两个for循环是否相同?如果我们在 for 循环中进行一些更改,假设在 for 循环中 i 已经加 3,对于 Java,下一个 for 循环中的 i 将是 4?而 Python 仍然从 2 开始 i
Leetcode 594. 最长和谐子序列。
我们定义和谐数组是最大值和最小值之差正好为1的数组
用Java编写的解决方案如下:
nums=[1,3,2,2,5,2,3,7]
public class Solution {
public int findLHS(int[] nums) {
Arrays.sort(nums);
int prev_count = 1, res = 0;
for (int i = 0; i < nums.length; i++) {
int count = 1;
if (i > 0 && nums[i] - nums[i - 1] == 1) {
while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
count++;
i++;
}
res = Math.max(res, count + prev_count);
prev_count = count;
} else {
while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
count++;
i++;
}
prev_count = count;
}
}
return res;
}
}
我转换为 Python:
nums=[1,3,2,2,5,2,3,7]
nums=sorted(nums)
prev_count=1
res=0
i=0
for i in range(len(nums)-1):
count=1
if i>0 and nums[i]-nums[i-1]==1:
while i<len(nums)-1 and nums[i] == nums[i+1]:
count+=1
i+=1
res=max(res,count+prev_count)
prev_count=count
else:
while i<len(nums)-1 and nums[i] == nums[i+1]:
count+=1
i+=1
prev_count=count
print (res)
在Java中
for (int i = 0; i < nums.length; i++) {
int count = 1;
if (i > 0 && nums[i] - nums[i - 1] == 1) {
while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
count++;
i++;
}
i++ 在 for 循环中,因此 i 从添加的任何内容开始。
在 Python 中:
for i in range(len(nums)-1):
count=1
if i>0 and nums[i]-nums[i-1]==1:
while i<len(nums)-1 and nums[i] == nums[i+1]:
count+=1
i+=1
在 i+=1 之后,它只适用于 While 循环,for 循环仍然从 i=2 开始,而不是从 4 开始。
Java 返回答案为 5,而 python 为 4。我调试代码,看起来 Java 开始 i 以添加任何 i,而 Python 没有接受添加的 i 并且总是从最后一个 i 开始。
最佳答案
在 java 中,for 循环语义是从 C 中借用的。
for (<initilization>; <termination condition>; <what to do in after each iteration>)
在开始时做一些事情(初始化),之后直到达到某个条件(终止条件),做一些事情以取得进展(每次迭代后做什么)。 i
的惯用 for 循环之所以有效,是因为迭代的状态保持在 i
中。因此,如果您在循环体中对 i
进行更改,迭代的状态也会发生变化。
python 语法类似于 bash
循环:
for i in some_iterable:
此处 i
从 some_iterable
获取每个值,并且循环为 i
的每个值运行一次。如果您在循环体内更改 i
,没关系; i
在下一次迭代期间被分配给 iterable 的下一个值。 循环的状态在可迭代对象中维护,而不是 i
。i
正是让您访问可迭代对象的当前值的原因。
关于java - Python 和 Java 之间的 For 循环区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765334/
我是一名优秀的程序员,十分优秀!