Redian新闻
>
D7000和D300s的定位分别是什么?
avatar
D7000和D300s的定位分别是什么?# PhotoGear - 摄影器材
C*4
1
问题:输入一个整数N,请问有多少种不同的方法把若干个连续的整数相加使得它们的
和为N?例如输入N=9,由于9 = 9、9 = 4 + 5、9 = 2 + 3 + 4,因此正确的输出是3。
分析:这是LeetCode第829题。
解法一:时间复杂度O(n)
我们可以想象有一个整数数组,数组里的第一个数字是1,第二个数字是2,以后的数字
以此类推。再假设有两个指针,第一个指针初始化指向数组的第一个数字,第二个指针
初始化指向数组的第二个数字。这两个指针就定位了一个子数组,该子数组由两个指针
之间的所有数字(包括两个指针指向的数字)组成。由于数组里的数字是连续递增的,
那么两个指针之间的任意子数组的数字也是连续递增的。
如果两个指针之间的子数组的所有数字之和小于输入的整数N,我们希望这个子数组包
含更多的数字,于是把第二个指针向右移动。每把第二个指针向右移动一位,相当于往
子数组的最右边添加一个新的数字,子数组的数字之和也会相应变大。如果此时子数组
的和仍然小于N,我们继续向右移动第二个指针。
如果子数组的和等于N,我们就找到了一个符合条件的子数组。接下来可以继续向右移
动第二个指针去寻找其他符合条件的子数组。
如果子数组的和大于N,我们希望子数组包含更少的数字,于是把第一个指针向右移动
。每把第一个指针向右移动一位,相当删除子数组最左边的数字,子数组的数字之和就
会相应变小。
这就是经典的双指针思路的应用。下面是根据这种思路写出的代码:
public int consecutiveNumbersSum(int N) {
int start = 1;
int end = 2;
int sum = 3;
int count = 1;
while (start <= N / 2) {
if (sum <= N) {
sum += end + 1;
end++;

if (sum == N) {
count++;
}
} else {
sum -= start;
start++;
}
}

return count;
}
在上述代码种,变量start相当于分析中的第一个指针,指向连续数字序列的最小的数
字(子数组的第一个数字);变量end相当于分析中的第二个指针,指向连续数字序列
的最大的数字(子数组的最有一个数字)。
上述代码中只有一个while循环,循环的每一次执行要么递增变量start,要么递增变量
end。由于start最多递增到N/2,而end最多也不会超过N。因此这种解法的时间复杂度
为O(n)。在LeetCode中,如果输入特别大的数字,比如大于10 ^ 8的数字,有可能超时。
解法二:O(n^0.5)
假设有k个连续的数字,它们的和为N。最小的k个连续的数字之和是1 + 2 + 3 + … +
k。从1开始的连续k个数字之和不一定等于N。可能存在一个整数i,(i + 1) + (i + 2)
+ (i + 3) + … + (i + k) = N。我们把这个等式稍微变换一下就有1 + 2 + 3 + …
+ k + i × k = N,也就是N - (1 + 2 + 3 + … + k) = i × k。
这个公式告诉我们,如果有k个连续的数字的和等于N,那么一定存在一个整数i,N 减
去1 + 2 + 3 + … + k的差等于i × k。也就是说N 减去1 + 2 + 3 + … + k的差一定
能被k整除。
1 + 2 + 3 + … + k的值很容易求出来,用一个从1开始的循环就能做到。下面是各种
思路的参考代码:
public int consecutiveNumbersSum(int N) {
int k = 1;
int sum = 0;
int count = 0;
while (sum < N) {
sum += k;
if (sum <= N && (N - sum) % k == 0) {
count++;
}

k++;
}

return count;
}
最后分析时间复杂度。上述代码中有一个while循环,循环一直执行到1 + 2 + 3 + …
+ k的结果大于N为止。由于1 + 2 + 3 + … + k等于k(k + 1) / 2,那么反过来如果输
入的整数是n,k的值最大也只能是O(n^0.5),因此第二种解法的时间复杂度是O(n^0.5)。
本文转载至"青云算法"微信公众号,欢迎大家一起来探讨更多解题。
avatar
x*t
2
二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
d*n
3
看题目感觉又是狗家的题
avatar
b*2
4
两者不一样
D300S是残福中的王者

【在 x*******t 的大作中提到】
: 二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
z*n
5
sqrt(n)的解法已经很naive了吧,我以为是贴了更巧妙的解法呢。
给定一个X,如果能被写成连续数字和,那就套下小学的等差数列求和,得出必然存在a
和n使得:
(a + (a + n - 1)) * n / 2 = x
x是给定目标数,已知,任务是求 a 和 n的整数解的个数
那最naive的办法就是用让n取1,2,3,4,... sqrt(2x),然后拿2X挨个除一下,把所有整
数a给找出来就行了。。。
这比你那个思路简单容易理解多了吧
avatar
d*n
7
金刚兄让我明白了我为什么没拿到Google的offer

在a
有整

【在 z*********n 的大作中提到】
: sqrt(n)的解法已经很naive了吧,我以为是贴了更巧妙的解法呢。
: 给定一个X,如果能被写成连续数字和,那就套下小学的等差数列求和,得出必然存在a
: 和n使得:
: (a + (a + n - 1)) * n / 2 = x
: x是给定目标数,已知,任务是求 a 和 n的整数解的个数
: 那最naive的办法就是用让n取1,2,3,4,... sqrt(2x),然后拿2X挨个除一下,把所有整
: 数a给找出来就行了。。。
: 这比你那个思路简单容易理解多了吧

avatar
r*v
8
D300s

【在 x*******t 的大作中提到】
: 二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
g*y
9
这个题目我比赛错了6次

在a
有整

【在 z*********n 的大作中提到】
: sqrt(n)的解法已经很naive了吧,我以为是贴了更巧妙的解法呢。
: 给定一个X,如果能被写成连续数字和,那就套下小学的等差数列求和,得出必然存在a
: 和n使得:
: (a + (a + n - 1)) * n / 2 = x
: x是给定目标数,已知,任务是求 a 和 n的整数解的个数
: 那最naive的办法就是用让n取1,2,3,4,... sqrt(2x),然后拿2X挨个除一下,把所有整
: 数a给找出来就行了。。。
: 这比你那个思路简单容易理解多了吧

avatar
r*v
10
你这个链接为什么不放签名档里?

【在 N**Y 的大作中提到】
: D300s
: 1, 对焦快
: 2,手感好
: 3,画质好
: 买D7K只有一种理由, FULL HD VIDEO
: http://www.flickr.com/photos/sunsetnoir/

avatar
z*n
11
看ls这么一说,怕有啥坑没想到,赶快找到这题写了下,没发现有啥坑直接就pass了,
就按那个等差数列实现下就行了。
class Solution {
public int consecutiveNumbersSum(int target) {
int count = 0, t = 2 * target;
for (int n = 1; n < Math.sqrt(t); ++ n)
if (t % n == 0 && (t / n + 1 - n) % 2 == 0 )
count ++;
return count;
}
}
avatar
R*a
12
D300s比D7k画质好?似乎所有有点儿名气的评测网站结论都相反啊

【在 N**Y 的大作中提到】
: D300s
: 1, 对焦快
: 2,手感好
: 3,画质好
: 买D7K只有一种理由, FULL HD VIDEO
: http://www.flickr.com/photos/sunsetnoir/

avatar
z*n
13

大宝建不但题刷的好,还这么谦虚,自叹不如啊。

【在 d*******n 的大作中提到】
: 金刚兄让我明白了我为什么没拿到Google的offer
:
: 在a
: 有整

avatar
N*Y
14
忘了怎么放了

【在 r***v 的大作中提到】
: 你这个链接为什么不放签名档里?
avatar
m*u
15
现在都800多题了??。。。
avatar
N*Y
16
我两个都用,自己的经验。
D7K只是像素高而已。

【在 R***a 的大作中提到】
: D300s比D7k画质好?似乎所有有点儿名气的评测网站结论都相反啊
avatar
z*n
17

你们这行也关注刷题么。。。

【在 m********u 的大作中提到】
: 现在都800多题了??。。。
avatar
R*a
18
像素高难道不是画质好的条件之一么?

【在 N**Y 的大作中提到】
: 我两个都用,自己的经验。
: D7K只是像素高而已。

avatar
m*u
19
哈哈 有时候问问刷到什么程度了。。。没刷好就先别面试了

【在 z*********n 的大作中提到】
:
: 你们这行也关注刷题么。。。

avatar
x*t
20
本版好像很少看到d300s的买卖,used的body,deal价是多少?

【在 b********2 的大作中提到】
: 两者不一样
: D300S是残福中的王者

avatar
d*u
21
必然D300S,高像素不是唯一
avatar
r*d
22
D300s只比D300多了个vedio
如果还没入的话入个二手low shutter的D300吧
手感对焦比D7000好很多,D7000sensor好
avatar
b*6
23
定位跟60d比7d是一样的
D7000多放了几个对焦点就把铁丝high的
avatar
w*n
24
还有100%取景器呢,60D有么
avatar
m*7
25
定位就是证明尼康多么善于自己拆自己的台

【在 x*******t 的大作中提到】
: 二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
C*y
26
有人讲D7K是D90和D300的更新产品。
avatar
b*r
27
D7000不是号称惨负高感之王
avatar
N*p
28
请问用过的XD
D300s 上Ai镜头可以Meter么?
View finder 是 100%么?
D300s的weather sealing怎么样?
avatar
m*s
29
D7000握在手里跟D90,D80没什么区别
D300s握在手里跟D700感觉差不多
avatar
x*t
30
有木有人知道300s的价格多少自用合理?1000刀body?

【在 x*******t 的大作中提到】
: 二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
w*e
31
差不多
avatar
r*v
32
差不多

【在 x*******t 的大作中提到】
: 有木有人知道300s的价格多少自用合理?1000刀body?
avatar
b*g
33
d7k的高感好

【在 N**Y 的大作中提到】
: D300s
: 1, 对焦快
: 2,手感好
: 3,画质好
: 买D7K只有一种理由, FULL HD VIDEO
: http://www.flickr.com/photos/sunsetnoir/

avatar
d*n
34
买一台D7000+d200,性能和手感都有了。
价格更一台d300s一样。

【在 x*******t 的大作中提到】
: 二者性能差不多,可能手感不一样,大家倾向选择什么?
avatar
b*2
35
D7000的高感确实不错

【在 b******g 的大作中提到】
: d7k的高感好
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。