Java 刷剑指offer 和为S的两个数字第一个只出现一次的字符

mac2024-02-19  59

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

输出描述:

对应每个测试案例,输出两个数,小的先输出。 import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> res = new ArrayList<>(); int left = 0, right = array.length-1; while(left<right){ if(array[left] + array[right] == sum){ res.add(array[left]); res.add(array[right]); return res; } else if(array[left] + array[right]>sum) right--; else left++; } return res; } }

题目描述

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

Java 的HashMap设置的比C++繁琐,如果直接用HashMap会写很多行程序,所以这里用数组简化。

public class Solution { public int FirstNotRepeatingChar(String str) { int[] hashmap = new int[256]; for(int i=0;i<str.length();i++){ hashmap[str.charAt(i)-'A']++; } for(int i=0;i<str.length();i++){ if(hashmap[str.charAt(i)-'A']==1) return i; } return -1; } }

 

 

最新回复(0)