本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论
知识点
- 整形溢出问题处理
- In库的熟练使用
题目
1.4.2 修改TreeSum,正确处理两个较大的int值相加可能溢出的情况
1.4.2 Modify ThreeSum to work properly even when the int values are so large that adding two of them might cause overflow.
分析
ThreeSum的代码如下
public class ThreeSum {
public static int count(int[] a) { // Count triples that sum to 0.
int N = a.length;
int cnt = 0;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
for (int k = j + 1; k < N; k++)
if (a[i] + a[j] + a[k] == 0)
cnt++;
return cnt;
}
public static void main(String[] args) {
int[] a = In.readInts(args[0]);
StdOut.println(count(a));
}
}
为了方便调试,这里我将
1Kints.txt,2Kints.txt,4Kints.txt,8Kints.txt,16Kints.txt,32Kints.txt,1Minints.txt放在当前项目下了,我们可以通过方法:
String filePathString = System.getProperty("user.dir");
String intFileString = filePathString + "/src/com/kyson/chapter1/section4/" + "1Kints.txt";
获得文件
答案
public class ThreeSum2 {
public static int count(long[] a) { // Count triples that sum to 0.
int N = a.length;
int cnt = 0;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
for (int k = j + 1; k < N; k++)
if (a[i] + a[j] + a[k] == 0)
cnt++;
return cnt;
}
public static void main(String[] args) {
String filePathString = System.getProperty("user.dir");
String intFileString = filePathString
+ "/src/com/kyson/chapter1/section4/" + "5ints.txt";
In in = new In(intFileString);
long[] a = in.readAllLongs();
StdOut.println(count(a));
}
}
为了验证一下效果,我在项目目录下创建了一个文件5ints,这里放了5个长整型数据用于测试。
代码索引
广告
我的首款个人开发的APP壁纸宝贝上线了,欢迎大家下载。