性男女做视频观看网站世界500强企业排名
web/
2025/10/1 12:31:40/
文章来源:
性男女做视频观看网站,世界500强企业排名,做淘宝客网站挣钱,中文电影网页模板免费下载回文数
给你一个整数 x #xff0c;如果 x 是一个回文整数#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。回文数是指正序#xff08;从左向右#xff09;和倒序#xff08;从右向左#xff09;读都是一样的整数。
示例 1#xff1a;
输入#xff1…回文数
给你一个整数 x 如果 x 是一个回文整数返回 true 否则返回 false 。回文数是指正序从左向右和倒序从右向左读都是一样的整数。
示例 1
输入x 121
输出true示例 2
输入x -121
输出false
解释从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3
输入x 10
输出false
解释从右向左读, 为 01 。因此它不是一个回文数。解题思路注意负数10的情况。 public boolean isPalindrome(int x) {// 如果是10的倍数也不是回文if (x 0 || (x % 10 0 x ! 0)) {return false;}int revertedNumber 0;while(x revertedNumber) {revertedNumber revertedNumber * 10 x % 10;x / 10;}return x revertedNumber || x revertedNumber / 10;}盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。 示例 1 输入[1,8,6,2,5,4,8,3,7] 输出49 解释图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下容器能够容纳水表示为蓝色部分的最大值为 49。 示例 2 输入height [1,1] 输出1 解题思路 首尾两个指针每次移动后判断长宽的乘机是否最大。 public int maxArea(int[] height) {if (height null || height.length 0) {return 0;}int cap 0;int i 0;int j height.length - 1;while(i j) {if (height[i] height[j]) {cap Math.max(cap, (j - i) * height[i]);} else {cap Math.max(cap, (j - i) * height[j--]);}}return cap;}整数转罗马数字
罗马数字包含以下七种字符 I V X LCD 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000例如 罗马数字 2 写做 II 即为两个并列的 1。12 写做 XII 即为 X II 。 27 写做 XXVII, 即为 XX V II 。 通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做 IIII而是 IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况 I 可以放在 V (5) 和 X (10) 的左边来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边来表示 400 和 900。 给你一个整数将其转为罗马数字。
解题思路按照罗马数字的字符数值计算出对应罗马数字的十进制数即可。 int[] values {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};String[] symbols {M, CM, D, CD, C, XC, L, XL, X, IX, V, IV, I};public String intToRoman(int num) {StringBuffer roman new StringBuffer();for (int i 0; i values.length; i) {int value values[i];String symbol symbols[i];while (num value) {num - value;roman.append(symbol);}if (num 0) {break;}}return roman.toString();}三数之和
给你一个整数数组 nums 判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k 同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意答案中不可以包含重复的三元组。
示例 1
输入nums [-1,0,1,2,-1,-4]
输出[[-1,-1,2],[-1,0,1]]
解释
nums[0] nums[1] nums[2] (-1) 0 1 0 。
nums[1] nums[2] nums[4] 0 1 (-1) 0 。
nums[0] nums[3] nums[4] (-1) 2 (-1) 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意输出的顺序和三元组的顺序并不重要。示例 2
输入nums [0,1,1]
输出[]
解释唯一可能的三元组和不为 0 。示例 3
输入nums [0,0,0]
输出[[0,0,0]]
解释唯一可能的三元组和为 0 。解题思路用map提前计算好两数之和临时缓存起来可以将复杂度降到O(N^2)比较麻烦的在于最后要输出不重复的解数组中同一个数字可能出现多次但是最后解不能重复所以需要去重和排序。map记录每个数字出现的次数然后对key进行排序最后在排序之后的数组里面去查找找到另外两个数字能和自己组成0。
首先对数组进行排序排序后固定一个数 nums[i]nums[i]nums[i]再使用左右指针指向 nums[i]nums[i]nums[i]后面的两端数字分别为 nums[L]nums[L]nums[L] 和 nums[R]nums[R]nums[R]计算三个数的和 sumsumsum 判断是否满足为 000满足则添加进结果集如果 nums[i]nums[i]nums[i]大于 000则三数之和必然无法等于 000结束循环
如果 nums[i]nums[i]nums[i] nums[i−1]nums[i-1]nums[i−1]则说明该数字重复会导致结果重复所以应该跳过
当 sumsumsum 000 时nums[L]nums[L]nums[L] nums[L1]nums[L1]nums[L1] 则会导致结果重复应该跳过LLL
当 sumsumsum 000 时nums[R]nums[R]nums[R] nums[R−1]nums[R-1]nums[R−1] 则会导致结果重复应该跳过R−−R--R−−
时间复杂度O(n2)O(n^2)O(n2 )n 为数组长度 public ListListInteger threeSum(int[] nums) {ListListInteger ans new ArrayList();int len nums.length;// 小于3个数直接返回空if (nums null || len 3) {return ans;}// 排序Arrays.sort(nums);for(int i 0; i len; i) {if(nums[i] 0) {break;}if(i 0 nums[i] nums[i - 1]) {// 连续两数一样去重continue;}int l i 1; // 从左边开始int r len - 1; // 从右边开始while(l r) {int sum nums[i] nums[l] nums[r];if (sum 0) {ans.add(Arrays.asList(nums[i], nums[l], nums[r]));while(l r nums[l] nums[l 1]) {l;}while(l r nums[r] nums[r - 1]) {r--;}l;r--;} else if(sum 0) {l;} else if(sum 0) {r--;}}}return ans;}最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。
示例 1
输入nums [-1,2,1,-4], target 1
输出2
解释与 target 最接近的和是 2 (-1 2 1 2) 。示例 2
输入nums [0,0,0], target 1
输出0解题思路用两个指针的方法先对数组进行排序i从头开始往后走。这里需要注意数组中存在多个重复数字的问题。jk 两个指针一前一后相向移动。
public int threeSumClosest(int[] nums, int target) {// 先排序Arrays.sort(nums);int ans nums[0] nums[1] nums[2];for(int i 0; i nums.length; i) {int start i 1;int end nums.length - 1;while(start end) {int sum nums[start] nums[end] nums[i];if(Math.abs(target - sum) Math.abs(target - ans)) {ans sum;}if(sum target) {end--;} else if(sum target) {start;} else {return ans;}}}return ans;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85055.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!